Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python wordlist permutation

How can i make this script to permute maximum of 3 combination of words from a list?

List.txt consists of 4 strings:

pass
10
test
word

Instead of combining all from one to four words i.e

output > pass10wordtest, 10testpassword,....etc

I want the final combination to be:

output > testpassword, passtestword, 10wordtest,....etc

My code:

from itertools import permutations
import os

# GET FILE
script_dir = os.path.dirname(os.path.realpath(__file__))
wordlist_rel_path = "List.txt"
wordlist_abs_file_path = os.path.join(script_dir, wordlist_rel_path)

# READ WORD LIST FROM FILE
word_list = []
print ("\ninput file is:", wordlist_abs_file_path,"\n")
with open(wordlist_abs_file_path) as wordlist:
     for line in wordlist:
         word_list.append(line.rstrip())

# PRINT INPUT LIST
print ("input list contains:")
print(word_list,"\n")

# GENERATE POWERSET
powerset_list = []
print ("output list is:")
for n in range(1, len(word_list)+1):
     for perm in permutations(word_list, n):
         powerset_list.append( "".join(perm) )
print(powerset_list)

# WRITE LIST TO FILE
powerset_rel_path = "powerset.txt"
powerset_abs_file_path = os.path.join(script_dir, powerset_rel_path)
powerset_abs_file = open(powerset_abs_file_path, 'w')
for item in powerset_list:
     powerset_abs_file.write("%s\n" % item)
powerset_abs_file.close()
like image 677
sfad Avatar asked Sep 10 '15 01:09

sfad


1 Answers

How can I permute maximum of 3 combination of words from a list?

The permutations function supports a second argument to select only three inputs at a time:

>>> from itertools import permutations
>>> for group in permutations(['pass', '10', 'test', 'word'], 3):
        print(''.join(group))  

pass10test
pass10word
passtest10
passtestword
password10
passwordtest
10passtest
10password
10testpass
10testword
10wordpass
10wordtest
testpass10
testpassword
test10pass
test10word
testwordpass
testword10
wordpass10
wordpasstest
word10pass
word10test
wordtestpass
wordtest10
like image 180
Raymond Hettinger Avatar answered Sep 28 '22 10:09

Raymond Hettinger