Python:使用多个循环将多个数据追加到一个列表中

2024-05-29 02:13:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将XML中的数据解析并存储到CSV文件中。在

我有许多多个重复的子根,这些子根迫使我在编写之前循环访问实例并存储它们。但是,我尝试做一些看起来很简单的事情,就是在同一个列表中添加多个标记,这样我就可以将writerows作为一行写入CSV文件中。在

以下是我的循环片段:

writer = csv.writer("input xml file name", dialect = 'excel')

data = []

for item1 in pat:
  if item1.find("name"):
    name = item1.find("name").text
    date = item1.find("date").text

    data.append((name, date))

for item2 in app:
  if item2.find("country"):
    country = item2.find("country")

    data.append((country))

for d in data:
  writer.writerow((d[0], d[1], d[2]))

现在我知道它并没有输入最后一个d[2]项,因为“字符串索引超出范围”,并且在打印列表时不会显示为任何内容。在

我也试过用数据扩展((country))也一样,但没有效果;它只是给了我同样的超出指数范围的误差。在

有没有方法可以继续添加到列表数据中?前两个条目“name”和“date”工作正常,但我需要另外两个循环来遍历比country更重复的标记,所以我需要一个通用的方法。在

以下是我想要的输出:

^{2}$

因为“Country”只出现在“app”中,有时,所以每个循环可能只出现1到2个国家,其余的为空,而“Name”和“Date”可能出现更多次。这就是为什么我有一些地方说(空白)。在

这看起来可能令人困惑,但实际上只是在XML文档中以这种方式格式化的问题。在

输入如下所示,其中“patcit”是“pat”循环,“us field of classification”是“app”循环:

.
.
<patcit num="00001">
<document-id>
<doc-number>2292227</doc-number>
<kind>A</kind>
<name>Kopyto</name>
<date>19420800</date>
</document-id>
</patcit>
<category>cited by examiner</category>
<classification-national><country>US</country><main-classification>  2 67</main-classification></classification-national>
</us-citation>
<us-citation>
<patcit num="00002">
<document-id>
<doc-number>2437830</doc-number>
<kind>A</kind>
<name>McAllister</name>
<date>19480300</date>
</document-id>
</patcit>
<category>cited by applicant</category>
</us-citation>
<us-citation>
<patcit num="00003">
<document-id>
<doc-number>2450631</doc-number>
<kind>A</kind>
<name>Buchler</name>
<date>19481000</date>
</document-id>
</patcit>
.
.
.
.
<us-field-of-classification-search>
<classification-national>
<country>US</country>
<main-classification>D 2731</main-classification>
</classification-national>
<classification-national>
<country>US</country>
<main-classification>D 2742</main-classification>
</classification-national>
<classification-national>
<country>US</country>
<main-classification>D 2714</main-classification>
</classification-national>
<classification-national>
<country>US</country>
<main-classification>D 2738</main-classification>
</classification-national>
<classification-national>
<country>US</country>
<main-classification>D 2701</main-classification>
</classification-national>
.
.

Tags: nameidnumberdatedocmainfinddocument
1条回答
网友
1楼 · 发布于 2024-05-29 02:13:28

如果您添加一个额外的空列表,您可以将其附加到该列表中

for item1 in pat:
  if item1.find("name"):
    name = item1.find("name").text
    date = item1.find("date").text

    data.append((name, date, []))

for item2 in app:
  if item2.find("country"):
    country = item2.find("country")

    data[-1][-1].append(country)

不过,如果你列出清单的话,可能更容易理解。有什么理由不先做第二个循环?在

相关问题 更多 >

    热门问题