我有那个文件my_file.txt
(我只显示开头):
a CACAAAAAGCGGCGTGGATTGATATTGTAATACGACTCACTATAGACCAACACTAATAATTATATCACTTCGCCT
b ACAGGNNNNNCTGCGTCTCAGGCGTTTTTTTTTTTTTTTTAAACAGCAAATTTTATTCATATACTAACCCCGCCT
c CAGTTTTTTGTCTCAGGCGTTTTTTTTTTTAAAAATTTTTTTTATCCCGTTTTTATAAGGCTATACCTGTCCGCCT
d CACACAAAAATGAGAGTGGATTGATTATGTAATACGACTCACTATAGGGTCGACAGCTTCGTCTTCGCCGCCTAA
我需要查看my_file.txt
第二个字段的前10个字符中的3个模式。我用我要找的句型编了一本字典
seq={}
seq['bc1']='AAAAAA'
seq['bc2']='TTTTTT'
seq['bc3']='NNNNNN'
微妙之处在于一行通常应该与另一行匹配
如果我们专注于前10个字符,那么只有一种my_file.txt
模式。例如,模式AAAAA
将与第一行和第四行匹配
我想得到一个作为输出的字典,其中包含字典的键seq
,以及作为值的my_file.txt
的对应行。最后一个条件是模式“GCCT”需要出现在行的最后10个字符中;如果没有,则即使在seq
中找到模式,也不会将该行添加到字典中(此处,模式始终存在于最后10个字符中):
defaultdict(<type 'list'>, {'bc1': [['a', 'CACAAAAAAGCGGCGTGGATTGATATGTAATACGACTCACTATAGACCAACACTAATAATTATATCACTTCGCCT\n'], ['d','CACACAAAAAATGAGAGTGGATTGATATGTAATACGACTCACTATAGGGTCGACAGCTTCGTCTTCGCCGCCTAA\n']], 'bc2': ['c', 'CAGTTTTTTGTCTCAGGCGTTTTTTTTTTTTTTTTTTTCACAAATAATCCCGTTTTTATAAAAACCTGTCCGCCT\n'], 'bc3':['ACAGGNNNNNCTGCGTCTCAGGCGTTTTTTTTTTTTTTTTAAACAGCAAATTTTATTCATATACTAACCCCGCCT\n']})
我有:
from collections import defaultdict
my_dict = defaultdict(list)
pattern='GCCT'
with open("my_file.txt","r") as file:
for lines in my_file.readlines():
line=lines.split("\t")
bar=line[1][0:10]
tail=line[1][-10:]
for k,v in seq.items():
if v in bar and pattern in tail:
my_dict[k].append(line)
然后,我将该字典提取为一个csv文件,其中键为文件名:
for k,v in my_dict.items():
with open("output_{}.fna".format(k), "w") as f:
csv=';'.join([','.join(t) for t in v])
f.write("%s,%s\n" % (k, csv))
我的问题是:当我查看输出文件时,我可以在两个文件中发现同一行。例如,行c XXXXXX
将被添加到两个文件中:一个对应于bc1(不正常),另一个对应于bc2(正常->;在模式TTTTT
上选择)。原因是:我们可以发现线的中间{{CD4}},{{CD11}} CGTTTTTGTCTCGTGTTTTTTTT <强> AAAAA < /强> TTTTTTT ATCCGTTTTATAGACTACTACTGTCCGCCTT & GT;因此,选择不仅仅是在前15个字符上进行的。我不明白为什么
有什么帮助吗
如果我理解正确,您的目标是在字符串的前15个字符(
CACATAGAGCGCTGC
)中找到具有特定字符串(如CACATA
)的行,(我猜是dna)(CACATAGAGCGCTGCGTGGATTGATATGTAATACGACTCACTATAGACCAACACTAATAATTATATCACTTCTTAAAATGGCTAATTCATTTTTCTTATCCTTATTAGTGTTATTC
)在这种情况下,代码中的
seq
太长了相关问题 更多 >
编程相关推荐