Python中的循环问题

时间:2012-02-05 05:29:07

标签: python loops for-loop

我正在尝试从另一个.txt文件中的对象列表中获取数据表.txt文件中的信息。
在代码List.txt看起来像

Obj2
Obj5
Obj6
etc.

和DataTable.txt看起来像

Obj1    Data1
Obj2    Data2
Obj3    Data3
etc.

我试过

f = file('List.txt')
g = file('DataTable.txt')

for line in f:
    l = line.split()
    name = l[0]
    for row in g:
        if row.startswith(name):
            data = row.split()
            print data[8]

但它只打印列表中第一个条目的数据。有谁能找到问题?

4 个答案:

答案 0 :(得分:1)

总结@Borealid和@Ignacio给出的精美答案,

f = file('List.txt')
g = file('DataTable.txt')

for line in f:
    l = line.split()
    name = l[0]
    g.seek(0)
    for row in g:
        if row.startswith(name):
            data = row.split()
            print data[8]

答案 1 :(得分:0)

迭代file消耗它。要么回到开头,要么按顺序缓存其中一个文件。

答案 2 :(得分:0)

问题是你在g的第一行f一直走过。{1}}。在f的第二行,g没有其他内容。

您需要将g重置为第一行。您可以在start_pos = g.tell()后面g.open,然后在g.seek(start_pos)完成后for row in g添加{{1}}。

答案 3 :(得分:0)

当您遍历文件时,您将移动您正在阅读的位置。将其视为移动文件的光标。为了绕过这个问题,只需先读入数据并迭代它。

f = file('List.txt').read().splitlines()       #read in the whole file, then split on the lines
g = file('DataTable.txt').read().splitlines()  #read in the whole file, then split on the lines

for line in f:
    l = line.split()
    name = l[0]
    for row in g:
        if row.startswith(name):
            data = row.split()
            print data[8]