文件路径列表/DataFrame动态批量解析XML文件报错排查:expected str, bytes, or os.PathLike object, not tuple
解决XML批量解析中的路径类型错误问题
错误根源分析
你遇到的"expected str, bytes, or os.PathLike object, not tuple"错误,核心问题出在这行代码:
xmlfile = next(filesdataframe.iterrows())
iterrows()方法每次返回的是**(行索引, 行数据)**的元组,而不是单纯的文件路径字符串。当你把这个元组传给ET.parse()时,它无法识别为合法的文件路径,自然就抛出了类型不匹配的错误。
DataFrame是否属于过度复杂?
其实不算过度复杂——如果后续你需要对文件路径做更多扩展操作(比如按目录分组、筛选特定子文件夹下的文件、附加文件属性如修改时间/大小),DataFrame能帮你快速完成这些数据处理工作。但如果只是单纯遍历解析文件,直接用最初的file_results列表确实更轻量,代码也更简洁。两种方式都没问题,完全取决于你后续的需求场景。
修正后的代码示例
方式1:保留DataFrame的遍历写法
不需要提前用next()获取元组,直接在循环里提取每行的路径字符串即可:
# 遍历DataFrame的每一行,获取索引和行数据 for ind, row in filesdataframe.iterrows(): # 从行数据中提取文件路径 xmlfile = row['Directory Path'] tree = ET.parse(xmlfile) root = tree.getroot() # 此处编写你的XML解析逻辑
如果追求更高的遍历效率,可以用itertuples()替代:
# index=False忽略行索引,只返回行数据 for row in filesdataframe.itertuples(index=False): xmlfile = row.Directory_Path # 或者用row[0]直接取第一列数据 tree = ET.parse(xmlfile) root = tree.getroot() # 此处编写你的XML解析逻辑
方式2:直接用列表遍历(更简洁)
如果你不需要DataFrame的额外功能,直接遍历最初收集路径的file_results列表就行:
for xmlfile in file_results: tree = ET.parse(xmlfile) root = tree.getroot() # 此处编写你的XML解析逻辑
这样就能顺利避免类型错误,完成批量XML文件的解析工作了。
内容的提问来源于stack exchange,提问作者Steven Marsh
相关产品推荐
相关产品推荐

