如何将Python for循环生成的结果保存到Excel文件中
问题解决方法
原代码的问题
- 每次循环都以
"w"模式打开文件:该模式会清空文件原有内容并重新写入,因此最终只会保留最后一次循环的结果。 writer.writerows(str(foo))逻辑错误:foo是函数对象,转成字符串并非生成的序列数据,且writerows需要接收可迭代的行数据(如列表、元组组成的可迭代对象)。
正确代码实现
考虑到你要生成的是4^18(约687亿)条序列,数据量极大,以下提供两种高效的写入方式:
方式1:循环逐条写入(同时打印)
import itertools import csv def foo(l): yield from itertools.product(*([l] * 18)) # 用with语句管理文件,自动关闭,仅打开一次 with open("primers.csv", "w", newline='') as outfile: writer = csv.writer(outfile) for x in foo('ATCG'): seq = ''.join(x) print(seq) # 将字符串放入列表作为一行数据写入 writer.writerow([seq])
方式2:批量写入(效率更高)
适合不需要打印,仅需要保存数据的场景:
import itertools import csv def foo(l): yield from itertools.product(*([l] * 18)) with open("primers.csv", "w", newline='') as outfile: writer = csv.writer(outfile) # 生成器表达式批量生成每行数据,直接写入 writer.writerows((''.join(x),) for x in foo('ATCG'))
重要提醒
4^18的序列数量超过680亿条,生成的CSV文件会占用极大存储空间(约几十TB),普通Excel无法打开如此大的文件(Excel最大支持约100万行),建议确认是否真的需要生成全部序列,或考虑分批处理。
内容的提问来源于stack exchange,提问作者Nadeen NBY
相关产品推荐
相关产品推荐

