读取 fasta 文件并编辑 python 中的行
Reading fasta files and edit the lines in python
我是编程新手,这是我第一次使用 python。我正在编写一个应该读取 fasta 文件并删除每个序列的 header 的代码。
我读取文件的代码:
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:2092\n', 'CTAAAAAGCGAGTGCGNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNANNNNNNCNNNNNNNNAAACANNAAGGTAAGAAACAAGCACAGATGAGAGC\n', '\n', '+\n', '#####################################################################################################\n', '\n', '@DBV2SVN1:110:B:7:1101:2491:2141\n', 'AAGTGAGCAAACAGAAACATAGTGCGGAGTGGGAAAATGAGACTCAAAAAAAGAGTGTGGGTATTCAGTAGGGGATATTAGGCCACAATACGAAAGAGCAA\n', '\n', '+\n', '#####################################################################################################\n', '\n', '@DBV2SVN1:110:B:7:1101:2924:2130\n'......]
这是一个包含每个序列的 header 的列表。因此我只想要每行的 DNA 序列(CTAAAA 或 AAGTAAAGCA)作为列表。
任何人都可以帮我吗?
非常感谢
干杯,
约翰
- 从这个问题来看,我认为你想要的是所有的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)
您可以使用正则表达式过滤器。假设您只想要包含一个或多个 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为列表中的“跳过间隔”
我是编程新手,这是我第一次使用 python。我正在编写一个应该读取 fasta 文件并删除每个序列的 header 的代码。 我读取文件的代码:
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:2092\n', 'CTAAAAAGCGAGTGCGNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNANNNNNNCNNNNNNNNAAACANNAAGGTAAGAAACAAGCACAGATGAGAGC\n', '\n', '+\n', '#####################################################################################################\n', '\n', '@DBV2SVN1:110:B:7:1101:2491:2141\n', 'AAGTGAGCAAACAGAAACATAGTGCGGAGTGGGAAAATGAGACTCAAAAAAAGAGTGTGGGTATTCAGTAGGGGATATTAGGCCACAATACGAAAGAGCAA\n', '\n', '+\n', '#####################################################################################################\n', '\n', '@DBV2SVN1:110:B:7:1101:2924:2130\n'......]
这是一个包含每个序列的 header 的列表。因此我只想要每行的 DNA 序列(CTAAAA 或 AAGTAAAGCA)作为列表。 任何人都可以帮我吗? 非常感谢
干杯, 约翰
- 从这个问题来看,我认为你想要的是所有的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)
您可以使用正则表达式过滤器。假设您只想要包含一个或多个 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为列表中的“跳过间隔”