我是编程新手,这是我第一次使用python。我正在编写一个代码,该代码应该读取fasta文件并删除每个序列的头。我读取文件的代码:
def read_fasta(inputfile):
with open(inputfile,'r') as f:
file=f.readlines()
f.close
return file
fasta_file=read_fasta('SELEX_100_reads.txt')
print(fasta_file)
fasta文件的输出如下:
['@DBV2SVN1:110:B:7:1101:1456:2092n', 'CTAAAAAGCGAGTGCGNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNANNNNNNCNNNNNNNNAAACANNAAGGTAAGAAACAAGCACAGATGAGAGCn', 'n', '+n', '#####################################################################################################n', 'n', '@DBV2SVN1:110:B:7:1101:2491:2141n', 'AAGTGAGCAAACAGAAACATAGTGCGGAGTGGGAAAATGAGACTCAAAAAAAGAGTGTGGGTATTCAGTAGGGGATATTAGGCCACAATACGAAAGAGCAAn', 'n', '+n', '#####################################################################################################n', 'n', '@DBV2SVN1:110:B:7:1101:2924:2130n'......]
这是一个列表,每个序列都有标题。因此,我只想把每一行的DNA序列(CTAAAA或AAGTAAAGCA(作为一个列表。有人能帮我吗?非常感谢
干杯,约翰·
您可以使用正则表达式过滤器。假设您只想要只包含一个或多个A/C/G/T或N字符的行(除了换行符和任何其他尾随空格(,您可以执行以下操作:
import re
file = list(filter(re.compile("[ACGTN]+s*$").match, file))
以移除其他线路。
如果包含N的字符串不应该包括在内(我不知道足够的生物化学知识来知道它们代表什么——从外表上看不是核苷酸(,那么显然要从正则表达式中排除N
。
您可以将DNA过滤到一个新列表中:
only_dna = fasta_file[1::6]
在[1::6]中,1是起始位置,6是"0";跳过间隔";在列表中。
- 根据这个问题,我认为你想要的是所有的DNA序列
- 如果行中包含除A、C、G、T以外的任何内容,则可以对其进行筛选
def read_fasta(inputfile):
with open(inputfile,'r') as f:
file=f.readlines()
ret = []
for line in file:
if set(strip(line)) == {'A','G','T','C'}:
ret.append(strip(line))
return ret
fasta_file=read_fasta('SELEX_100_reads.txt')
print(fasta_file)