我有一个很大的文本文件,里面有很多物品。每个项目有2行。第一行(即ID行)以>
开头,而属于ID行(其上方一行)的第二行是一个字符序列。这个小例子是我的文本文件中的2个项目(真实文件中有很多项目一个接一个)。
小例子:
>NST00000373840.4|ENSG00000119396.6|OTTHUMG00000020582.1|OTTHUMT00000053857.1|RAB14-001|RAB14|4145|UTR5:1-99|CDS:100-199|UTR3:200-221|
ATCTTGGACCAGCCCGAGGAAGATACTGAGGGAGCACAGGAGCAGTCACCGCTGCCACTGCTACTGCCGCTACTGCTGCCGGCGCGTCTGCACCTCTCGGCCTGCCAGTGTACCTGCCGGCGCCTCGGTCGACCGCCCCCGCCCCCTCTCCCGCTGCGTCCGCACTCCTGTTCCTGGTCCTGACGCCCCCCTCCCGCCCGGAAAGCTGCCCAGCCACCAGC
>ENST00000396625.3|ENSG00000081052.10|OTTHUMG00000149892.1|OTTHUMT00000313770.1|COL4A4-001|COL4A4|9895|UTR5:1-150|CDS:151-205|UTR3:206-335|
CGAGAGCGCCGCGAAGAGGCAGCGGGGCGCGGGTGGATTGGGGCTGGAGGTGCGCGTCCCGTGGGGTGGCAAGGCGGCAGCTCCTGGCGCTGCGGGCGTCCCCACAGGAACAGACTTTGACCCAGAACACAGAACCTCACTTGTCAACAAGAACCTTCTGGAAGAGAAGACTGGCAGAATATTTTTTAAGTACTAAGACTTGCCTGCGATGTGGTCTCTGCACATAGTACTAATGAGGTGCTCCTTCAGATTGACCAAGTCCTTGGCCACAGGTCCCTGGTCACTTATACTCATTCTCTTTTCTGTACAATATGTATATGGGAGTGGAAAGAAAT
如您所见,在CDS
行中有ID
,在其前面有一系列数字。我想采用此范围并提取序列行中的字符。例如,在上面的示例中,对于第一个ID
,CDS
前面的范围是100-199
,因此我想将字符数100
提取到字符数{如我在预期输出中所示,{1}}。
同样在199
行中,各列也是ID
分隔的。在|
的新文件(预期结果)中,我只需要ID
行的第六列。
预期输出:
ID
我想对文本文件中的所有项目执行相同的操作。
为此,我首先尝试将文件导出到>RAB14
CCTGCCAGTGTACCTGCCGGCGCCTCGGTCGACCGCCCCCGCCCCCTCTCCCGCTGCGTCCGCACTCCTGTTCCTGGTCCTGACGCCCCCCTCCCGCCC
>COL4A4
AACCTTCTGGAAGAGAAGACTGGCAGAATATTTTTTAAGTACTAAGACTTGCCT
中的dictionary
行中,其中python
是keys
行,而{{1} }是序列。就像这本字典。
ID
然后可以将键导出到列表中,并将值导出到另一个列表中。
values
,但结果与我想要的不一样。你知道如何解决吗?
答案 0 :(得分:0)
您可以仅通过splitlines()读取行,并使用常规split来完成您需要的其他所有事情,而不是像dict那样。 检查以下代码。
sequence = '>NST00000373840.4|ENSG00000119396.6|OTTHUMG00000020582.1|OTTHUMT00000053857.1|RAB14-001|RAB14|4145|UTR5:1-99|CDS:100-199|UTR3:200-221|ATCTTGGACCAGCCCGAGGAAGATACTGAGGGAGCACAGGAGCAGTCACCGCTGCCACTGCTACTGCCGCTACTGCTGCCGGCGCGTCTGCACCTCTCGGCCTGCCAGTGTACCTGCCGGCGCCTCGGTCGACCGCCCCCGCCCCCTCTCCCGCTGCGTCCGCACTCCTGTTCCTGGTCCTGACGCCCCCCTCCCGCCCGGAAAGCTGCCCAGCCACCAGC'
cds = [i for i in sequence.split('|') if 'CDS' in str(i)] # O/P ['CDS:100-199']
from_range = int(cds[0].split(':')[-1].split('-')[0]) # O/P 100
end_range = int(cds[0].split(':')[-1].split('-')[-1]) # O/P 199
required_seq = sequence.split('|')[-1][from_range:end_range] # O/P CCTGCCAGTGTACCTGCCGGCGCCTCGGTCGACCGCCCCCGCCCCCTCTCCCGCTGCGTCCGCACTCCTGTTCCTGGTCCTGACGCCCCCCTCCCGCCC
希望这会有所帮助。