for循环问题

时间:2011-05-04 15:47:12

标签: python for-loop

For循环问题:

in1 = open('file_1', 'r')
in2 = open('file_2', 'r')
outf = open('out_file', 'w')


for line in in1:
    s = line.split('\t')
    A = s[1][:-1]
    B = s[0]
    counter = 0
    for line in in2:
        ss = line.split('\t')
        if A == ss[0] or A == ss[1]:
            counter += 1
    outf.write('%s\t%s\t%s\n'%(A,B,counter))

问题在于,第一个for line in in2:只会通过line in in1。我似乎无法弄明白为什么。

4 个答案:

答案 0 :(得分:6)

您只能迭代一次文件。要从头开始,请使用

in2.seek(0)

在内循环之前。

答案 1 :(得分:2)

第一次循环in2时,您会使用它。要么重新打开它,要么回到起点。

答案 2 :(得分:0)

从内循环中的file_2读取每一行后,in2位于文件结尾。如果要读取file_1中每行的file_2,请添加:

    in2.seek(0)

在写作之前或之后。

答案 3 :(得分:0)

使用文件时,请执行此操作

with open('out_file', 'w') as outf:
    with open('file_1', 'r') as in1:
        for line in in1:
            s = line.split('\t')
            a = s[1][:-1]
            b = s[0]
            counter = 0
            with open('file_2', 'r') as in2:
                for line in in2:
                    etc.

使用with可确保您的文件已关闭。

在最小的封闭范围内打开文件可确保它可以一直读取。重新打开文件的成本很高,但有很多方法可以加快这个应用程序的速度。

另外,请仅使用lowercase个变量名称。为类名保留Uppercase