M S*_*ith 2 python string performance file-io
我一直在寻找其他SO帖子,以便创建一个程序,根据某些参数生成一个组合列表(字母+数字),我已经得到了这样的结果:
from itertools import product
from string import *
keywords = [''.join(i) for i in product(ascii_letters + digits, repeat = 3)]
file = open("file.txt", "w")
for item in keywords:
file.write("%s\n" % item)
file.close()
Run Code Online (Sandbox Code Playgroud)
如果repeat参数保持在3/4,这个程序工作正常,但如果提高到5或更高,那么程序没有完成 - 它不会崩溃,似乎永远不会完成.我猜这是一个性能问题,但我不确定.如果有人能提供更有效的计划,那将是非常感激的.
其次,我希望程序输出:
使用此当前代码,它将仅输出第一个.
product(ascii_letters + digits, repeat=5)为strings(62**5)生成所有916,132,832种可能性.
在写入文件之前,您当前的代码会在内存中列出所有这些字符串对象.这对你的系统来说可能太多了,因为每个三个字母的字符串对象大约是52个字节(在Python 3中,在Python 2中略少).这意味着您为列表制作了大约44GB的Python字符串.
相反,使用生成器表达式keywords以避免将所有字符串保存在内存中(只使用(...)而不是[...]):
keywords = (''.join(i) for i in product(ascii_letters + digits, repeat=5))
Run Code Online (Sandbox Code Playgroud)
然后,您可以像以前一样迭代并将字符串写入文件:
with open("file.txt", "w") as f:
for item in keywords:
f.write(item)
f.write('\n')
Run Code Online (Sandbox Code Playgroud)
(product(ascii_letters + digits, repeat=3) 也会产生'aec'和'cea'.)