python-3.x - 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')
解决方案
线
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) 的输出。
推荐阅读
- ios - 将 SwiftUI 中的文本与背景属性相结合会产生错误,因为无法将“某些视图”类型的值转换为预期的参数类型“文本”?
- java - Thrift Java:不能使用保留语言关键字:“别名”
- xunit - xUnit - 异步列表的模拟方法返回 null
- pygame - 我想创建多个敌人但不断收到相同的错误代码
- c# - WPF C# MVVM ListView 未更新
- python - 在xampp中使用pip安装mysql时如何解决这个问题
- objective-c - WebRTC:如何将 RTCVideoEncoderSettings 传递给 RTCVideoEncoder
- firebase - Flutter facebook auth 每次都要求登录
- macos - 将 NSArrayController 的 managedObjectContext 设置为 nil 时崩溃
- adobe-indesign - app.activeDocument 在后台打开文档时在 indesign 中出现错误