You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:解决文件追加缺失文件报错与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:07:13