Python脚本CSV文件未生成求助:循环输出正常但无文件
问题描述
脚本运行时IDE能正常输出所有行数据,但运行结束后未生成包含所有行的data.csv文件,代码如下:
import itertools import hashlib import csv # 原代码缺失该导入,会导致报错终止 chars = list(range(0,10)) numbers_list = list(range(0,25)) for comb in itertools.combinations_with_replacement(chars, 5): for A in numbers_list: pure = str(A) + ':' + str(comb) B = pure.replace(")", "").replace("(", "").replace("'", "").replace(",", "").replace(" ", "") C = hashlib.sha256(B.encode('utf-8')).hexdigest() rows = [A , str(B), str(C)] print(rows) header = ['A', 'B', 'C'] with open('data.csv', 'w', encoding='UTF8', newline='') as f: writer = csv.writer(f) writer.writerow(header) writer.writerow(rows) print('end')
问题根源
- 导入缺失:原代码未导入
itertools、hashlib、csv模块,会直接触发报错,导致脚本提前终止,无法执行到写入文件的步骤。 - 写入逻辑错误:写入文件的代码块放在循环外部,仅会写入循环最后一次生成的
rows数据,而非所有循环产生的行。
修正方案
方案1:循环内逐行写入(适合小数据量)
将文件写入操作嵌入循环,每生成一行数据就写入一行:
import itertools import hashlib import csv chars = list(range(0,10)) numbers_list = list(range(0,25)) header = ['A', 'B', 'C'] with open('data.csv', 'w', encoding='UTF8', newline='') as f: writer = csv.writer(f) writer.writerow(header) # 先写入表头 for comb in itertools.combinations_with_replacement(chars, 5): for A in numbers_list: pure = str(A) + ':' + str(comb) B = pure.replace(")", "").replace("(", "").replace("'", "").replace(",", "").replace(" ", "") C = hashlib.sha256(B.encode('utf-8')).hexdigest() rows = [A , str(B), str(C)] print(rows) writer.writerow(rows) # 实时写入当前行 print('end')
方案2:先收集数据再批量写入(适合大数据量,减少IO开销)
先把所有行数据存入列表,最后一次性写入文件:
import itertools import hashlib import csv chars = list(range(0,10)) numbers_list = list(range(0,25)) all_rows = [] header = ['A', 'B', 'C'] all_rows.append(header) # 添加表头 for comb in itertools.combinations_with_replacement(chars, 5): for A in numbers_list: pure = str(A) + ':' + str(comb) B = pure.replace(")", "").replace("(", "").replace("'", "").replace(",", "").replace(" ", "") C = hashlib.sha256(B.encode('utf-8')).hexdigest() rows = [A , str(B), str(C)] print(rows) all_rows.append(rows) # 收集所有行数据 # 批量写入全部数据 with open('data.csv', 'w', encoding='UTF8', newline='') as f: writer = csv.writer(f) writer.writerows(all_rows) print('end')
额外提醒
你的脚本组合数为C(10+5-1,5)=2002,乘以25后共50050行数据,两种方案均适用;若后续数据量级大幅提升,优先选择方案2以提高运行效率。
内容的提问来源于stack exchange,提问作者Juan Soto Valdez
相关产品推荐
相关产品推荐

