求助:解决文件追加缺失文件报错与XLS格式兼容问题
解决方案
问题1:处理NEW文件夹缺失文件的情况
遍历OLD文件夹文件时,先检查NEW文件夹中是否存在同名文件,不存在则直接跳过,避免触发FileNotFoundError。用os.path.exists()方法即可完成文件存在性判断。
问题2:适配XLS文件的追加操作
XLS属于二进制格式,无法用普通文本读写逻辑处理,需要借助第三方库实现:
xlrd:读取XLS文件中的数据内容xlutils:复制现有XLS文件并实现行追加
通过文件扩展名区分CSV和XLS格式,分别处理:- CSV文件:保留原文本追加逻辑,优化编码避免乱码
- XLS文件:读取NEW文件的所有行数据,复制OLD文件后将数据追加到末尾,再覆盖保存原OLD文件
修改后的完整代码
import os import xlrd from xlutils.copy import copy existing_files_directory = "C:/Misc/Quali Test/Phase 2/OLD" new_files_directory = "C:/Misc/Quali Test/Phase 2/NEW" # 遍历OLD文件夹内所有文件 for file_name in os.listdir(existing_files_directory): existing_file_path = os.path.join(existing_files_directory, file_name) new_file_path = os.path.join(new_files_directory, file_name) # 跳过NEW文件夹中不存在的文件 if not os.path.exists(new_file_path): print(f"跳过:NEW文件夹中无{file_name}") continue # 按文件扩展名分支处理 file_ext = os.path.splitext(file_name)[1].lower() if file_ext == ".csv": # CSV文件文本追加 with open(existing_file_path, "a", encoding="utf-8") as existing_file: with open(new_file_path, "r", encoding="utf-8") as new_file: existing_file.write(new_file.read()) print(f"已处理CSV:{file_name}") elif file_ext == ".xls": # XLS文件二进制追加行 try: # 读取原OLD文件并创建可写副本 old_workbook = xlrd.open_workbook(existing_file_path, formatting_info=True) writable_workbook = copy(old_workbook) old_sheet = old_workbook.sheet_by_index(0) target_sheet = writable_workbook.get_sheet(0) # 读取NEW文件中的数据 new_data_workbook = xlrd.open_workbook(new_file_path) new_data_sheet = new_data_workbook.sheet_by_index(0) # 从OLD文件已有行的下一行开始追加 start_row = old_sheet.nrows for row_idx in range(new_data_sheet.nrows): for col_idx in range(new_data_sheet.ncols): target_sheet.write(start_row + row_idx, col_idx, new_data_sheet.cell_value(row_idx, col_idx)) # 保存覆盖原OLD文件 writable_workbook.save(existing_file_path) print(f"已处理XLS:{file_name}") except Exception as e: print(f"处理XLS文件{file_name}失败:{str(e)}") else: print(f"跳过不支持的格式:{file_name}")
注意事项
- 运行前需安装依赖库:
pip install xlrd xlutils - 若需处理XLSX格式,需替换为
openpyxl库,逻辑可参考上述XLS处理流程 - CSV编码若为
gbk等非UTF-8格式,需修改代码中encoding参数对应值
内容的提问来源于stack exchange,提问作者Yogs
相关产品推荐
相关产品推荐

