我有一个带有序列ID的文件,还有绑定位置的信息。我只想提取位置信息而不提取A,T,C,G信息。较长序列上方的较短序列显示其位置,左侧的每个数字例如在文件A中,值451是左侧的位置值。我想得到短序列在长序列上的位置,从453开始(起始位置),得到短序列的长度,大小为21,再加上453,得到终点474。有人能帮我吗?你知道吗
文件A.txt
chr1:152806601-152807450
TTCAGCACCATGGACAGCGCC
451 GGCTTCAGCACCACGGACAGCGCCCCACCCGCGGCCCTCCCCCCGGCGGCGCGCTCCAGCCGGTGTAGGCGAGGC
TTCAGCACCATGGACAGCGCC
751 AGAGCCCCCCGGGACTGCAGAGAGCACCTGGGAGGCTGGACTGGGAACGAGACATACTCGAAGGAGTAAGTGAAG
chr10:125364276-125364825
TTCAGCACCATGGACAGCGCC
301 CAGTAATGTGGGGTTGTGGTCAGCACCATGGACAGCTCCCCTGTTGCTTCATATTGAGGAATAGGAAAGCGCCGC
TTCAGCACCATGGACAGCGCC
376 TATCTCCGGATCCTGGCTAGCTCCAGCCACTGCAGGTAACTGTCTTGAATGGGCTTAGAAACATGGTGATGTCTG
所需输出
chr1:152806601-152807450 453 474
chr1:152806601-152807450 757 778
chr10:125364276-125364825 318 339
chr10:125364276-125364825 378 399
示例代码
import re
with open("A.txt", "r") as f:
lines = f.readlines()
label_ptrn = re.compile("") # insert regular expression sequence ID
line_ptrn = re.compile("") # insert regular expression start site
inner_ptrn = re.compile("") # insert regular expression end site
all_matches = []
for line in lines:
m = label_ptrn.match(line)
if m:
label = m.groupdict().get("label")
continue
m = line_ptrn.match(line)
if m:
start = m.groupdict().get("start_value")
sequence = m.groupdict().get("sequence")
mi = inner_ptrn.search(sequence)
if not mi:
continue
span = mi.span()
all_matches.append((label, int(start)+span[0], int(start)+span[1]))
with open("A_ouput.bed", "w+b") as f:
for m in all_matches:
f.write('%s\t%i\t%i\n' % m)
所以在我看来,你想要的输出的起始位置是1。你知道吗
较短序列中的第一个
T
看起来好像在较长序列的第四个字符之上。如果较长序列的第一个字符位于位置451,则较短序列的第一个字符将位于位置454。你知道吗如果文件结构是常量这里是一个非正则表达式解决方案。你知道吗
结果
如果我误解了您的示例数据,请取消对
start -= 1
的注释。你知道吗相关问题 更多 >
编程相关推荐