繁体   English   中英

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

[英]Python: writing combinations of letters and numbers to a file

我一直在寻找其他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()

如果repeat参数保持在3/4,这个程序工作正常,但如果提高到5或更高,那么程序没有完成 - 它不会崩溃,似乎永远不会完成。 我猜这是一个性能问题,但我不确定。 如果有人能提供更有效的计划,那将是非常感激的。

其次,我希望程序输出:

  • AEC
  • CEA

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

product(ascii_letters + digits, repeat=5)为字符串生成所有916,132,832种可能性( 62**5 )。

在写入文件之前,您当前的代码会在内存中列出所有这些字符串对象。 这可能对您的系统来说太多了,因为每个三个字母的字符串对象大约是52个字节(在Python 3中,在Python 2中略少)。 这意味着您为列表制作了大约44GB的Python字符串。

相反,使用keywords生成器表达式来避免将所有字符串保存在内存中(只使用(...)而不是[...] ):

keywords = (''.join(i) for i in product(ascii_letters + digits, repeat=5))

然后,您可以像以前一样迭代并将字符串写入文件:

with open("file.txt", "w") as f:
    for item in keywords: 
        f.write(item)
        f.write('\n')

(另外, product(ascii_letters + digits, repeat=3) 生成'aec'和'cea'。)

你可能想试试这个:

file = open("file.txt", "w")
for item in product(ascii_letters + digits, repeat =  3):
  file.write('%s\n' % ''.join(item))
file.close()

在这里,我们避免将所有答案收集到一个大数组(关键字)。 product()返回一个生成器,因此迭代它比在迭代之前收集所有响应更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM