Python:将字母和数字组合写入文件

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或更高,那么程序没有完成 - 它不会崩溃,似乎永远不会完成.我猜这是一个性能问题,但我不确定.如果有人能提供更有效的计划,那将是非常感激的.

其次,我希望程序输出:

  • AEC
  • CEA

使用此当前代码,它将仅输出第一个.

Ale*_*ley 7

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'.)