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

如何批量读取多级文件夹中XML文件并导入Pandas DataFrame?

批量提取多级文件夹中XML数据到Pandas DataFrame

问题描述

我有一个包含多个子文件夹的文件夹,所有子文件夹中都存放着XML文件。我已编写代码将数据提取至Pandas DataFrame,能否通过指定根目录,实现运行代码时批量提取所有文件夹(包括子文件夹)中的XML数据?

原代码优化与修复

你当前的代码仅能遍历指定目录下的直接XML文件,无法深入子文件夹。以下是修改后的代码,实现递归遍历所有子文件夹并提取数据:

import os
import pandas as pd
from lxml import etree

# 指定根目录
root_dir = '你的根文件夹路径' 

speakers_data = []

# 定义命名空间
ns = {
    'tb': 'http://www.talkbank.org/ns/talkbank',
    'xsi': 'http://www.w3.org/2001/XMLSchema-instance'
}

# 递归遍历所有子文件夹
for root, dirs, files in os.walk(root_dir):
    for name in files:
        if name.endswith('.xml'):
            file_path = os.path.join(root, name)
            # 获取当前文件所在的子文件夹名称
            folder_name = os.path.basename(root)
            
            tree = etree.parse(file_path)
            speakers = []
            
            for participant in tree.xpath("//tb:Participants/tb:participant", namespaces=ns):
                speaker_info = {
                    'folder_name': folder_name,  # 添加文件夹名称便于数据溯源
                    'speaker_name': participant.get('name'),
                    'role': participant.get('role'),
                    'age': participant.get('age'),
                    'sex': participant.get('sex')
                }
                speakers.append(speaker_info)  # 修正原代码的变量名错误与逻辑问题
            
            df_speakers = pd.DataFrame(speakers)
            speakers_data.append(df_speakers)

# 合并所有子DataFrame为最终结果
speakers_data = pd.concat(speakers_data, ignore_index=True)

关键修改说明

  • 用os.walk(root_dir)替代os.listdir(dir),实现递归遍历根目录下所有层级的子文件夹与文件
  • 修复原代码中的变量错误:将speakers_info.append(speakers)修正为speakers.append(speaker_info),解决数据添加逻辑颠倒的问题
  • 新增folder_name字段,方便后续区分不同子文件夹来源的数据

内容的提问来源于stack exchange,提问作者Datababe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:34:52