【问题标题】:Parse multiple xml files in a folder解析文件夹中的多个xml文件
【发布时间】:2020-04-26 12:34:39
【问题描述】:

我是新手,正在学习 Python。我正在处理一个文件夹中的 XML 文件(5,754 个文件)。使用 os 模块我可以毫无问题地打印所有文件名。我可以毫无问题地解析一个文件并写入 CSV 文件。我在尝试解析文件夹中的所有文件时遇到问题。请帮忙,谢谢。代码 sn-ps 和下面的所有代码。

这工作正常并打印所有 5,754 个文件名

import os
for path, dirs, files in os.walk(r"C:\Users\dan\Desktop\parse"):
    for f in files:
        clinical = os.path.join(path, f)
        print(clinical)

输出: C:\Users\dan\Desktop\toparse\ABC0000xxxx\ABC 00009932.xml C:\Users\dan\Desktop\toparse\ ABC 0000xxxx\ ABC 00009945.xml C:\Users\dan\Desktop\toparse\ ABC 0000xxxx\ ABC 00009958.xml

工作代码解析:写入 CSV

import csv
import xml.etree.ElementTree as ET
import os

tree = ET.parse("ABC00000102.xml")
root = tree.getroot()

with open('names.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)

    for child in root.iter():
        key = child.tag
        value = child.text
        writer.writerow([key, value])

我的文件夹代码打印所有文件,但以下错误 代码

import csv
import xml.etree.ElementTree as ET
import os

with open('names.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)

for path, dirs, files in os.walk(r"C:\Users\dan\Desktop\parse"):
    for f in files:
        clinical = os.path.join(path, f)
        print(clinical)

tree = ET.parse("clinical")
root = tree.getroot()

for child in root.iter():
    key = child.tag
    value = child.text
    writer.writerow([key, value])

错误 回溯(最近一次通话最后): 文件“C:/Users/dan/PycharmProjects/clinicals/example.py”,第 14 行,在 树 = ET.parse("临床") 解析中的文件“C:\Users\dan\AppData\Local\Programs\Python\Python37-32\lib\xml\etree\ElementTree.py”,第 1197 行 tree.parse(源,解析器) 解析中的文件“C:\Users\dan\AppData\Local\Programs\Python\Python37-32\lib\xml\etree\ElementTree.py”,第 587 行 源 = 开放(源,“RB”) FileNotFoundError:[Errno 2] 没有这样的文件或目录:“临床” 进程以退出代码 1 结束

【问题讨论】:

  • 您从该错误消息中了解/不了解什么?我觉得很清楚。

标签: python xml csv


【解决方案1】:

您正在调用ET.parse("clinical"),它会在您当前工作的目录中查找名为“clinical”的文件。

如果您希望它打开由clinical 变量指定的路径,则需要改为使用ET.parse(clinical)

另外,如果您的意图是解析找到的每个文件,则需要修复缩进以确保它发生在 for 循环中。目前,您的代码只会解析它在目录中找到的最后一个文件,因为您的解析发生在循环之后。

【讨论】:

  • 非常感谢。这帮助了我,Bless。
  • 不客气!此外,如果您是该网站的新手,请确保回答“已接受”,如果他们解决了您的问题
猜你喜欢
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多