字节字符串格式CSV按对应文件名批量保存问题
解决批量对应保存字节CSV数据的问题
问题根源
你之前的嵌套循环逻辑完全错误:外层循环遍历每个文件名,内层循环遍历所有报告数据,每个文件都会被所有有效报告反复覆盖写入,最终所有文件内容都不是对应索引的报告,完全没实现「文件名匹配同位置数据」的需求。
正确解决方案
核心思路是将文件名列表和报告数据列表按索引一一配对,逐个处理每一组对应关系,同时跳过无效报告。
代码实现
# 假设你的文件名列表是filenames,报告数据列表是All_reports_files # 先处理列表长度不一致的情况,避免索引越界 max_process_count = min(len(filenames), len(All_reports_files)) for idx in range(max_process_count): file_path = filenames[idx] report_data = All_reports_files[idx] # 跳过标记为无效的报告 if report_data == 'Report can not be Processed!': print(f"跳过无效报告:{file_path}") continue # 确保是字节串再写入(wb模式要求写入字节数据) if isinstance(report_data, bytes): with open(file_path, 'wb') as f: f.write(report_data) print(f"成功写入文件:{file_path}") else: print(f"错误:{file_path} 对应的报告不是字节格式,无法写入")
关键细节说明
- 用
min(len(filenames), len(All_reports_files))限制处理范围,避免因两个列表长度不一致导致的索引错误 - 通过
isinstance(report_data, bytes)验证数据格式,防止非字节数据写入wb模式报错 - 每个文件仅对应同索引的报告数据,彻底解决重复覆盖问题
更简洁的写法(适用于列表长度一致的场景)
如果能确定文件名和报告数据的列表长度完全匹配,可直接用zip配对:
for file_path, report_data in zip(filenames, All_reports_files): if report_data == 'Report can not be Processed!': print(f"跳过无效报告:{file_path}") continue if isinstance(report_data, bytes): with open(file_path, 'wb') as f: f.write(report_data) else: print(f"{file_path} 报告格式错误,无法写入")
内容的提问来源于stack exchange,提问作者Hamza Ahmed
相关产品推荐
相关产品推荐

