Python 3.x 为什么赢了';是否将我的for循环写入所有创建的文件?

Python 3.x 为什么赢了';是否将我的for循环写入所有创建的文件?,python-3.x,Python 3.x,我认为我的for循环或openwith语句有问题,但我不确定它是什么 我试图将每个项目与文本文件的每一行进行比较,如果该行包含该项目,则该行将打印到.bed文件中,其名称取自登录号(acc) 我希望创建每个文件(文件名取自acc),但只创建并写入第一个文件。所有其他文件都已创建但未写入 控制台输出为: ____________________ chr10 75911036 75911101 NM_006721.3_cds_0_0_chr10_75911037_f 0 +

我认为我的for循环或openwith语句有问题,但我不确定它是什么

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

我希望创建每个文件(文件名取自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   +

_____________________
_____________________
_____________________
_____________________
_____________________


我不确定发生这种情况的具体原因。但是,我建议对文件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)

它将处理文件的打开/关闭,以防出现问题

谢谢您的回答!它仍然提出了同样的问题,但这似乎解决了它:

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)
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)