为什么我的for循环不写所有创建的文件?

时间:2019-10-15 11:05:52

标签: python-3.x

我认为我的for循环或with语句打开有问题,但是我不确定这是什么。

我正在尝试将每个项目与文本文件的每一行进行比较,如果该行包含该项目,则该行将被打印到一个.bed文件中,其名称取自登录号(acc)。

    for acc in acc_trimmed:
        f2 = open((acc.rsplit(".", 1)[0]) + ".bed", "w")
        print("_____________________")
        for line in f:
            if acc in line:
                print(line)
                f2.write(line)
        f2.close()

我希望每个文件都被创建(文件名取自acc),但是只有第一个文件被创建和写入。所有其他文件均已创建但未写入。

控制台输出为:

____________________
chr10   75911036    75911101    NM_006721.3_cds_0_0_chr10_75911037_f    0   +

chr10   75960521    75960596    NM_006721.3_cds_1_0_chr10_75960522_f    0   +

chr10   75984295    75984349    NM_006721.3_cds_2_0_chr10_75984296_f    0   +

chr10   76074424    76074503    NM_006721.3_cds_3_0_chr10_76074425_f    0   +

chr10   76153898    76154071    NM_006721.3_cds_4_0_chr10_76153899_f    0   +

chr10   76158228    76158337    NM_006721.3_cds_5_0_chr10_76158229_f    0   +

chr10   76285013    76285184    NM_006721.3_cds_6_0_chr10_76285014_f    0   +

chr10   76349039    76349075    NM_006721.3_cds_7_0_chr10_76349040_f    0   +

chr10   76360136    76360251    NM_006721.3_cds_8_0_chr10_76360137_f    0   +

chr10   76429940    76430027    NM_006721.3_cds_9_0_chr10_76429941_f    0   +

chr10   76468078    76468203    NM_006721.3_cds_10_0_chr10_76468079_f   0   +

_____________________
_____________________
_____________________
_____________________
_____________________

2 个答案:

答案 0 :(得分:0)

我不确定发生这种情况的具体原因。但是,建议您为文件IO使用with关键字:

for acc in acc_trimmed:
    with open((acc.rsplit(".", 1)[0]) + ".bed", "w") as output_file:
        print("_____________________")
        for line in f:
            if acc in line:
                print(line)
                output_file.write(line)

如果问题出在这里,它将处理文件的打开/关闭

答案 1 :(得分:0)

谢谢您的回答!它仍然引发相同的问题,但是这似乎可以解决此问题:

for acc in acc_trimmed:
    with open("RefSeq_CDS") as f:
        with open((acc.rsplit(".", 1)[0]) + ".bed", "w") as output_file:
            print("_____________________")
            for line in f:
                if acc in line:
                    print(line)
                    output_file.write(line)