【问题标题】:Read all XML files under multiple directories using python使用python读取多个目录下的所有XML文件
【发布时间】:2016-10-20 09:45:33
【问题描述】:

我正在通过 Jupyter Notebooks 使用 Pandas。我有 10 个存储在多个位置的 XML 文件。 例如:

./A/1.xml
./A/2.xml
./A/3.xml
./B/4.xml
./B/5.xml
./B/6.xml

如何加载所有这些文件,以便提取每个文件中的三个特定元素,例如 id、名称和假设?

我在问题的加载方面需要帮助。仅供参考,如果我对每个文件执行以下操作,则上面使用的路径有效:

from lxml import etree
ltree = etree.parse("./100/A/1.xml")

我更喜欢使用 BeautifulSoup 的解决方案,但是 lxml 或 ElementTree 也可以。

XML文档的结构是:

<?xml version="1.0" encoding="UTF-8"?>
<pub-ref>
<doc-id>
<country>US</country>
<doc-num>05040672</doc-num>
<date>20090219</date>
</doc-id>
</pub-ref>
<app-ref>
<doc-id>
<country>US</country>
<doc-num>111324</doc-num>
<date>20100919</date>
</doc-id>
</app-ref> 

【问题讨论】:

  • 对于一次性脚本,我会使用subprocess.check_output(['ls', './*/*.xml']).split() 来获取文件名列表。
  • 请发布 XML 文件的结构,因为它是解析特定值所必需的。而且 pandas 没有现成的导入 XML 功能。所以你必须做一些数据操作。

标签: python xml beautifulsoup lxml elementtree


【解决方案1】:

使用glob 获取与您的模式匹配的所有文件的列表:

import glob
import os
from lxml import etree

dir = '/path/to/the/parent/directory/'
for file in glob.iglob(os.path.join(dir, '*/*.xml')):
   with open(file) as f:
      data = etree.parse(f)

【讨论】:

  • 你能告诉我如何从中提取属性吗?或者有没有办法检查变量数据的长度?
  • 您的示例 XML 文件中没有属性,所以不确定您要问什么。
  • 抱歉。我对此非常陌生。我想在所有 XML 文件 "05040672" 中从中提取数字 05040672
  • 所以介于 之间的任何数字
  • 您发布的文件格式不正确,您确定这是完整的文件吗?
猜你喜欢
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多