我认为我的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 +
_____________________
_____________________
_____________________
_____________________
_____________________
答案 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)