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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:15:05