在搜索了两个正则表达式的DNA序列后,我试图创建一个.bed文件。理想情况下,我希望生成一个选项卡分隔的文件,其中包含序列描述、第一个正则表达式的开始位置和第二个正则表达式的结束位置。我知道regex部分是有效的,它只是创建了\t我正在处理的分离文件
我希望我可以打开/创建一个文件,只需为包含此信息的for loop
的每次迭代打印一行新行,如下所示:
with open("Mimp_hits.bed", "a+") as file_object:
for line in file_object:
print(f'{sequence.description}\t{h.start()}\t{h_rc.end()}')
file_object.close()
但这似乎不起作用(创建空文件)。我还尝试使用file_object.write
,但这同样会创建一个空文件
这是我所有的代码,包括搜索正则表达式:
import re, sys
from Bio import SeqIO
from Bio.SeqRecord import SeqRecord
infile = sys.argv[1]
for sequence in SeqIO.parse(infile, "fasta"):
hit = re.finditer(r"CAGTGGG..GCAA[TA]AA", str(sequence.seq))
mimp_length = 400
for h in hit:
h_start = h.start()
hit_rc = re.finditer(r"TT[TA]TTGC..CCCACTG", str(sequence.seq))
for h_rc in hit_rc:
h_rc_end = h_rc.end()
length = h_rc_end - h_start
if length > 0:
if length < mimp_length:
with open("Mimp_hits.bed", "a+") as file_object:
for line in file_object:
print(sequence.description, h.start(), h_rc.end())
file_object.close()
这是所需的输出:
Focub_II5_mimp_1__contig_1.16(656599:656809) 2 208
Focub_II5_mimp_2__contig_1.47(41315:41540) 2 223
Focub_II5_mimp_3__contig_1.65(13656:13882) 2 224
Focub_II5_mimp_4__contig_1.70(61591:61809) 2 216
这是示例输入:
>Focub_II5_mimp_1__contig_1.16(656599:656809)
TACAGTGGGATGCAAAAAGTATTCGCAGGTGTGTAGAGAGATTTGTTGCTCGGAAGCTAGTTAGGTGTAGCTTGTCAGGTTCTCAGTACCCTATATTACACCGAGATCAGCGGGATAATCTAGTCTCGAGTACATAAGCTAAGTTAAGCTACTAACTAGCGCAGCTGACACAACTTACACACCTGCAAATACTTTTTGCATCCCACTGTA
>Focub_II5_mimp_2__contig_1.47(41315:41540)
TACAGTGGGAGGCAATAAGTATGAATACCGGGCGTGTATTGTTTTCTGCCGCTAGCCCATTTTAACAGCTAGAGTGTGTATATTAACCTCACACATAGCTATCTCTTATACTAATTGGTTAGGGAAAACCTCTAACCAGGATTAGGAGTCAACATAGCTTGTTTTAGGCTAAGAGGTGTGTGTCAGTACACCAAAGGGTATTCATACTTATTGCCCCCCACTGTA
>Focub_II5_mimp_3__contig_1.65(13656:13882)
TACAGTGGGAGGCAATAAGTATGAATACCGGGCGTGTATTGTTTTTCTGCCGCTAGCCTATTTTAATAGTTAGAGTGTGCATATTAACCTCACACATAGCTATCTTATATACTAATCGGTTAGGGAAAACCTCTAACCAGGATTAGGAGTCAACATAGCTTCTTTTAGGCTAAGAGGTGTGTGTCAGTACACCAAAGGGTATTCATACTTATTGCCCCCCACTGTA
>Focub_II5_mimp_4__contig_1.70(61591:61809)
TACAGTGGGATGCAATAAGTTTGAATGCAGGCTGAAGTACCAGCTGTTGTAATCTAGCTCCTGTATACAACGCTTTAGCTTGATAAAGTAAGCGCTAAGCTGTATCAGGCAAAAGGCTATCCCGATTGGGGTATTGCTACGTAGGGAACTGGTCTTACCTTGGTTAGTCAGTGAATGTGTACTTGAGTTTGGATTCAAACTTATTGCATCCCACTGTA
有人能帮忙吗
谢谢:)
您正在尝试以“a+”模式打开文件,并在其中的行上循环(这样做时,文件位于末尾,因此将找不到任何内容)。在任何情况下,如果这只是一个输出文件,那么您将以“a”模式打开它以附加到它
可能您只想打开一次文件进行追加,在
with
语句中,当您想要实际向文件追加字符串时,使用file_object.write(...)
执行主循环。请注意,使用此with
构造时不需要file_object.close()
要将一行写入文件,您可以执行以下操作:
如果你想让它分开,你也可以添加} a function ,所以你可以使用
sep="\t"
,这就是为什么python 3制作了^{sep
、end
、file
和flush
关键字参数打开文件进行追加意味着文件指针从文件末尾开始,这意味着写入文件不会覆盖任何数据(被追加到文件末尾),而对其进行迭代(或从中读取)不会产生任何类似于已到达文件末尾的效果
因此,您不需要迭代文件的行,而只需将单行写入其中:
你也可以考虑打开一个文件在循环的开始附近,因为打开一次,写多次比打开多次效率更高,而且Fube会自动关闭文件,所以不需要显式地执行。p>
相关问题 更多 >
编程相关推荐