【发布时间】:2020-08-12 20:59:46
【问题描述】:
在通过 DNA 序列搜索两个正则表达式后,我正在尝试创建一个 .bed 文件。理想情况下,我想生成一个制表符分隔的文件,其中包含序列描述、第一个正则表达式的开始位置和第二个正则表达式的结束位置。我知道正则表达式部分有效,它只是创建了我正在努力解决的 \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+打开文件,因为您打算附加到它,但随后您对其进行了迭代?你的意图是什么? -
输入:sequence.description、h.start()、h_rc.end() 在搜索正则表达式时被识别。如果我在 file_object: 循环中的 for 行之外使用它,它会打印所需的输出。
-
Tadhg McDonald-Jensen,我相信我需要对其进行迭代以创建新行。这是不必要的吗?
-
如果您的意图是在文件中添加一行,那么只需执行
print(..., file=file_object)将行写入文件(不循环文件),如果这是所需的行为,我可以发布回答更详细。 -
using: print(sequence.description, h.start(), h_rc.end(), file=file_object) 没有循环确实提供了所需的输出!谢谢,我如何确保它是制表符分隔的?此外,如果您愿意,将非常感谢您提供更详细的答案。谢谢