使用beautifulsoup将xml文件解析为csv文件



我正在尝试解析多个(最终超过1000个(xml文件,以获得三个信息persName、@ref和/date。我已经设法获得了所有的文件,当我使用print((时,它会给我我想要的所有信息。但是,当我尝试将该信息写入csv文件时,只解析最后一个xml文件。

from bs4 import BeautifulSoup
import csv
import os
path = r'C:programming1my-app'
for filename in os.listdir(path):
if filename.endswith(".xml"):
fullpath = os.path.join(path, filename)
f = csv.writer(open("test2.csv", "w"))
f.writerow(["date", "Name", "pref"])
soup = BeautifulSoup (open(fullpath, encoding="utf-8"), "lxml")
# removing unnecessary information to better isolate //date
for docs in soup.find_all('tei'):
for pubstmt in soup.find_all("publicationStmt"): 
pubstmt.decompose()
for sourdesc in soup.find_all("sourceDesc"):
sourdesc.decompose()
for lists in soup.find_all("list"):
lists.decompose()
for heads in soup.find_all("head"):
lists.decompose()
#finding all dates of Protokolls under /title
for dates in soup.find_all("date"):
date = dates.get('when')
#getting all Names from xml files exept for thos in /list
for Names in soup.find_all("persname"):
nameonly = Names.contents
nameref = Names.get("ref")
f.writerow([date, nameonly, nameref])'

如果我把写行放在Names下面,那么它只写最后一个文件的所有信息,如果我把writerow放在Names后面,那么它就只写一个名称的信息

有人能告诉我我做错了什么吗?我试过很多for循环,但似乎都不起作用。

您写道:

但是,当我尝试将该信息写入csv文件时,只解析最后一个xml文件。

从阅读代码开始,发生的事情是:

每个XML都被解析,但只有最后一个XML文件被写入CSV

,这是因为您正在打开test2.csv"用于书写";对于每个输入XML。当您打开"w"进行写入时,它会创建文件,或者在您的情况下,它re-为每次迭代创建文件(覆盖其内容(。

因为你想要一个标题:

  1. 在开始迭代XML之前,您需要打开CSV
  2. 写下你的信头
  3. 循环遍历XML处理和写入CSV
  4. 在最底部,退出循环后,关闭CSV

最新更新