Python:for循环中的循环不符合预期

时间:2012-05-03 15:56:43

标签: python

我使用以下代码组合两个文本文件:

def combine_acpd_ccs(self, ccs_file, acps_file, out_file):

    with open(ccs_file, 'r') as in_file1:
        with open(acps_file, 'r') as in_file2:
            with open(out_file, 'w') as out1:
                out1.write('PDB\tPA\tEHSS\tACPS\n')
                for line in in_file1:
                    segs = line.split()
                    for i in in_file2:
                        sse_score = i.split()
                        #print line
                        #print segs
                        if segs[0][:-4] == sse_score[0]:
                            out1.write(segs[0][:-4]+'\t'+segs[1]+'\t'+segs[2]+'\t'+sse_score[1]+'\n')

示例数据如下:

ccs_file:

1b0o.pdb    1399.0  1772.0
1b8e.pdb    1397.0  1764.0

acps_file:

1b0o    0.000756946316066
1b8e    8.40662008775
1b0o    6.25931529116

我期待我的表现如下:

PDB PA  EHSS    ACPS
1b0o    1399.0  1772.0  0.000756946316066
1b0o    1399.0  1772.0  6.25931529116
1b8e    1397.0  1764.0 8.40662008775

但我的代码只生成了我预期输出的前两行。如果我在第二个segs循环中打印for,则只会将ccs_file中的第一行传递给循环。我出错的任何想法?

1 个答案:

答案 0 :(得分:7)

问题是在每次外循环迭代后你不会重新打开/回退in_file2

执行

for i in in_file2:

所有后续迭代in_file2的尝试都不会做任何事情,因为文件指针已经位于文件的末尾。

如果文件相对较小,您可能需要将ccs_file加载到内存中,然后进行字典查找。