首页 > 解决方案 > Python Split itertools 输出到多个文件(大输出)

问题描述

所以我创建了一个脚本来从文件中读取行(1500行)

将它们写为每行 10 个(并使用产品 abcda 、 abcdb 等完成所有可能的输出......)

问题是我运行脚本的那一刻,我的计算机完全冻结了(因为它写入了太多数据)

所以我想如果可以每 100 mb 运行一次脚本,它将把它保存到一个文件中并保存当前状态,所以当我再次运行脚本时,它实际上会从我们停止的地方运行(100mb 文件的最后一行)

或者,如果您有其他解决方案,我很想听听:P

继承人的脚本:

from itertools import product

with open('file.txt', 'r') as f:
    content = f.readlines()
comb = product(content, repeat=10)
new_content = [elem for elem in list(comb)]
with open('log.txt', 'w') as f:
    for line in new_content:
        f.write(str(line) + '\n')

标签: python-3.x

解决方案


线

new_content = [elem for elem in list(comb)]

获取生成器并将其转换为内存中的列表,两次。结果和刚才做的一样

new_content = list(comb)

您的计算机冻结,因为这将使用所有可用的 RAM。由于您仅使用 new_content 对其进行迭代,因此您可以直接迭代初始生成器:

from itertools import product

with open('file.txt', 'r') as f:
    content = f.readlines()
comb = product(content, repeat=10)
with open('log.txt', 'w') as f:
    for line in comb:
        f.write(str(line) + '\n')

但是现在这将填满您的硬盘,因为输入大小为 1500 行,它将产生 57665039062500000000000000000000 行 (1500**10) 的输出。


推荐阅读