Python批量将XML文件转CSV时出现NotADirectoryError如何解决
错误原因
- 核心触发原因:你的代码在第13行先通过
os.path.isfile(next_new_path)判定当前路径是普通文件,第14行就直接对这个文件调用了仅支持目录参数的os.listdir()方法,传入文件路径必然会触发NotADirectoryError异常。 - 同时存在的其他逻辑问题:
- 路径拼接使用硬编码斜杠
/,在Windows等非类Unix系统上运行会出错 third_new_path路径拼接错误,完全指向了错误的文件地址- 未做文件后缀筛选,会尝试读取目录下的json等非XML文件,引发额外报错
- 使用已被pandas官方弃用的
DataFrame.append方法,高版本pandas无法正常运行 - 多层嵌套遍历逻辑混乱,没有正确区分文件和目录的处理逻辑
- 路径拼接使用硬编码斜杠
修复方案
直接使用os.walk递归遍历目标目录下的所有文件,筛选XML文件读取合并即可,不需要手动写多层循环避免逻辑错误,修复后的代码如下:
import os import pandas as pd xml_root_path = "/Users/ruzi/Desktop/top1000_complete 2" csv_save_path = "/Users/ruzi/Desktop/xml.csv" # 用列表存储每个XML的DataFrame,合并时性能更好 df_list = [] # os.walk自动递归遍历所有子目录 for root, dirs, files in os.walk(xml_root_path): for file in files: # 跳过mac系统的.DS_Store隐藏文件,仅处理XML后缀文件 if file == '.DS_Store' or not file.lower().endswith('.xml'): continue # 用os.path.join拼接路径,兼容所有操作系统 xml_full_path = os.path.join(root, file) temp_df = pd.read_xml(xml_full_path) df_list.append(temp_df) # 合并所有数据后导出CSV final_df = pd.concat(df_list, ignore_index=True) final_df.to_csv(csv_save_path, index=False)
内容的提问来源于stack exchange,提问作者ruzi
相关产品推荐
相关产品推荐

