如何批量读取多级文件夹中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
相关产品推荐
相关产品推荐

