使用python以相同的速率遍历文本文件中的列表和行?

时间:2012-12-03 02:49:28

标签: python list file-io iteration

所以我在另一篇文章中提到了我的作业,但不是很详细,因此我自己的错不能得到我想要的答案。我需要做的是打开一个结构化文本文件,其中文件的每一行都与特定类别有关。虽然类别和顺序不会改变,但重复的次数可能会有所改变。我的工作是获取每一行(忽略前两行)并向该行添加XML标记。为此,我提出了一个列表,其中包含类别的字符串名称。我遇到的问题是我无法弄清楚如何以与文件中文本行相同的速率遍历类别列表。

例如:

如果我的文本文件是:

peas
carrots
broccoli
beans

我的清单是

tagList=["apples","oranges","bananas","pears"]

然后我不断得到:

<apples>peas</apples>
<oranges>peas</oranges>
<bananas>peas</bananas>
<pears>peas</pears>
<apples>carrots</apples>
<oranges>carrots</oranges>
<bananas>carrots</bananas>
<pears>carrots</pears>
ect....

而不仅仅是

<apples>peas</apples>
<oranges>carrots</oranges>
<bananas>broccoli</bananas>
<pears>beans</pears>

我的印象是我需要一个嵌套的for循环所以我有这样的东西。

for line in file:
    for x in tagList:
        outputFile.write("<"+x+">"+line+"</"+x+">\n")

我完全理解为什么事情会以他们的方式出现,我只是觉得如何解决它。我发现其他帖子以相同的速率迭代2个列表,但似乎无法找到以相同的速率迭代文件和列表中的行。任何帮助将不胜感激。感谢!!!

3 个答案:

答案 0 :(得分:1)

不确定这里有什么关于回答家庭作业的政策,但我会解释一下你的代码在做什么有助于:

它的工作方式与编码方式完全一致。

嵌套了for循环(文件中的tagList)。

所以你实际上正在做的是通过文件,如果有4个项目,在每个点(1-4)你再次循环通过tagList(有4个项目)。

所以在第一步,你得到了豌豆(来自文件),但在你输出它之前,你进入另一个for循环(tagList),一旦你在那里,你将输出“豌豆”。 / p>

然后第二个for循环将再次进行3次,你将获得总共4个“豌豆”。一旦迭代完成,你就会回到第一个for循环并移动到下一个元素,这次将输出胡萝卜。

希望能解释你在这里做的事情。

答案 1 :(得分:1)

Unutbu是正确的 - zip在这里最容易使用。

>>> lista = ['a', 'b', 'c', 'd']
>>> listb = [1, 2, 3, 4]
>>> for a, b in zip(lista, listb):
    print a, b

a 1
b 2
c 3
d 4

嵌套for循环看起来像这样,并且基本上会将您的列表相乘 - 我不认为这是您想要的。

>>> for a in lista:
    for b in listb:
        print a, b


a 1
a 2
a 3
a 4
b 1
b 2
...

另一种方法是使用列表索引,但由于Python具有zip功能,因此最好使用它。

>>> for i in range(4):
    print lista[i], listb[i]


a 1
b 2
c 3
d 4

答案 2 :(得分:0)

    python 3.2
    list comprehension

    >>> [["<"+v+">"+i+"</"+v+">"] for i in st for v in tag]