Python合并CSV文件报错:无法识别Excel格式及非压缩文件错误
问题分析与解决方案
核心错误原因
- 你目标是合并CSV文件,但代码误用了
pd.read_excel()读取文件——CSV是纯文本格式,不属于Excel文件体系,自然会触发格式识别错误;后续添加engine='openpyxl'无效,因为openpyxl仅支持xlsx/xlsb这类基于zip压缩的Excel格式,CSV并非压缩包,所以出现file is not a zip file报错。 - 最后保存时用
to_csv()却将文件名设为Final.xlsx,格式不匹配,会导致生成的文件无法被Excel正常识别。
修正后的代码
import pandas as pd import os data_location = "" # 替换为你的CSV文件所在目录路径 desired_headings = ["DSP CODE", "TERRITORY", "PPD", "CURRENCY"] df_total = pd.DataFrame(columns=desired_headings) # 只遍历目录中的CSV文件,避免读取无关文件 for file in os.listdir(data_location): if file.endswith(".csv"): # 用os.path.join拼接路径,适配Windows/Linux不同路径分隔符 file_path = os.path.join(data_location, file) # 用pd.read_csv读取CSV文件,这才是正确的读取方式 df_file = pd.read_csv(file_path) # 提前检查文件是否包含所需列,避免KeyError valid_columns = [col for col in desired_headings if col in df_file.columns] if valid_columns: selected_columns = df_file.loc[:, valid_columns] # 将新数据追加到总表末尾,符合常规合并逻辑 df_total = pd.concat([df_total, selected_columns], ignore_index=True) # 按需选择保存格式 # 保存为CSV(推荐,保持源格式一致性) df_total.to_csv("Final.csv", index=False) # 若需保存为Excel,需先安装openpyxl(pip install openpyxl),再执行下面代码 # df_total.to_excel("Final.xlsx", index=False, engine="openpyxl")
关键修正点说明
- 替换
pd.read_excel()为pd.read_csv(),匹配CSV文件的读取需求。 - 添加
file.endswith(".csv")过滤条件,避免读取目录中的隐藏文件、非CSV格式文件。 - 使用
os.path.join()拼接路径,解决跨操作系统的路径分隔符问题。 - 增加列有效性检查,防止部分CSV文件缺少指定列时抛出错误。
- 修正保存逻辑:CSV格式对应
to_csv()+.csv后缀;Excel格式对应to_excel()+指定engine="openpyxl"。
内容的提问来源于stack exchange,提问作者James Upson
相关产品推荐
相关产品推荐

