使用 python 的具有特定算法的词表生成器
Posted
技术标签:
【中文标题】使用 python 的具有特定算法的词表生成器【英文标题】:wordlist generator with specific algorithms using python 【发布时间】:2022-01-21 01:19:09 【问题描述】:拜托,我需要创建一个像“X4K7GB9y”这样的单词表。长度为 8
(大写字母) (数字) (字母大写) (数字) (字母大写) (字母大写) (数字) (字母小写)
如果您给我一个提示,我将不胜感激,无需重复使用 python 提前谢谢你
【问题讨论】:
你需要每一个组合吗? 不!但这会有所帮助! 我的意思是会有数百万种可能的组合,随机选择会起作用吗? 有“itertools.permutations”。您可以提取所有可能的大写字母和数字排列并遍历小写字母并将其组合在嵌套的 for 循环中并从字符构建“单词”。 @Sam 是的,随机选择会起作用!!谢谢你 【参考方案1】:您可以使用random.sample
并从您想要的列表中选择 k=8 件。
为满足您的要求,您可以在不重复的情况下生成各个类别(大写、小写、数字)中的字符,并将它们重新排序。您可以将其放入循环中,并将结果写入文件。
import random
import string
random.seed(0)
NUM_WORDS = 10
with open("wordlist.txt","w",encoding="utf-8") as ofile:
for _ in range(NUM_WORDS):
uppc = random.sample(string.ascii_uppercase,k=4)
lowc = random.sample(string.ascii_lowercase,k=1)
digi = random.sample(string.digits,k=3)
word = uppc[0] + digi[0] + uppc[1] + digi[1] + uppc[2] + uppc[3] + digi[2] + lowc[0]
print(word,file=ofile)
这是你想要的吗?或者你的意思是不重复?
【讨论】:
是的,但这只会打印一个单词。如何使其循环并将输出写入txt文件!? 我更新了代码。您可以通过设置 NUM_WORDS 来自定义代码,或者将输出文件wordlist.txt
修改为其他内容。【参考方案2】:
所以,理论上,这样做的简单方法是像这样得到所有排列。
from itertools import product
from string import ascii_uppercase, digits
ups = ascii_uppercase
lows = ascii_lowercase
for x in product(ups, digits, ups, digits, ups, ups, digits, lows):
print("".join(x))
但是,实际上您很可能会耗尽内存。请注意,有很多排列(准确地说是 11881376000),因此您很可能想要获得其中的一个子集。你可以这样,n
是你想要的排列数。
def alphastring_generator(pattern, n):
for idx, x in enumerate(product(*pattern)):
if idx > n:
break
yield "".join(x)
my_pattern = [ups, digits, ups, digits, ups, ups, digits, lows]
result = [*alphastring_generator(my_pattern, n=1000)]
【讨论】:
以上是关于使用 python 的具有特定算法的词表生成器的主要内容,如果未能解决你的问题,请参考以下文章