使用rglob递归搜索.asc文件合并存Excel时报FileNotFoundError如何解决
错误原因及修正方案
核心错误点
- 未定义变量引用:
with open(name)中的name变量不存在,应该使用遍历生成的path对象 - 路径参数错误:
path.name仅返回不带路径的纯文件名,程序默认在当前工作目录查找文件,找不到嵌套在DATA目录下的目标文件 - 变量类型冲突:初始
content被定义为列表,循环内被fn.readlines()的返回结果覆盖为字符串列表,后续append操作逻辑完全错误 - 冗余低效操作:同时使用原生
open和pandas.read_csv重复读取文件,且pd.concat放在循环内每次拼接,性能极低
修正后代码
import pandas as pd from pathlib import Path df_list = [] # 遍历所有asc文件 for path in Path('DATA').rglob('*.asc'): # 直接将Path对象传给read_csv,自动识别完整路径 df = pd.read_csv( path, skiprows=0, encoding="ascii", engine='python', sep='|', delimiter=None, index_col=False, header=0, skipinitialspace=True ) df_list.append(df) # 所有文件读取完成后一次性拼接 final_df = pd.concat(df_list, ignore_index=True) # 打印前10行验证 print(final_df.head(10)) # 保存为Excel final_df.to_excel("asc_result.xlsx", index=False)
改动说明
- 直接使用
path对象作为pd.read_csv的入参,自动携带完整相对路径,解决文件找不到的问题 - 移除冗余的
open读文件逻辑,避免变量冲突 - 先收集所有DataFrame到列表,最后一次性拼接,大幅提升运行效率
- 拼接时添加
ignore_index=True避免不同文件的索引重复冲突 - 新增
to_excel逻辑直接导出最终Excel文件
内容的提问来源于stack exchange,提问作者superunknown
相关产品推荐
相关产品推荐

