python 中的 FASTA 文件解析序列
Parsing sequences from a FASTA file in python
我有一个文本文件:
>name_1
data_1
>name_2
data_2
>name_3
data_3
>name_4
data_4
>name_5
data_5
我想在一个列表中存储 header (name_1
, name_2
..) 和数据 (data_1
, data_2
.. ..) 在 Python 程序的另一个列表中。
def parse_fasta_file(fasta):
desc=[]
seq=[]
seq_strings = fasta.strip().split('>')
for s in seq_strings:
if len(s):
sects = s.split()
k = sects[0]
v = ''.join(sects[1:])
desc.append(k)
seq.append(v)
for l in sys.stdin:
data = open('D:\python\input.txt').read().strip()
parse_fasta_file(data)
print seq
这是我试过的代码,但我无法得到答案。
最根本的错误是试图访问其范围之外的变量。
def function (stuff):
seq = whatever
function('data')
print seq ############ error
您无法访问 function
之外的 seq
。这样做的通常方法是让 function
return 一个值,并将它捕获在调用者的一个变量中。
def function (stuff):
seq = whatever
return seq
s = function('data')
print s
(我特意在函数内外使用了不同的变量名,在function
里面你不能访问s
或者data
,在外面,你不能访问[=20= ...
除此之外,我们可以尝试编写一个函数,其中 return 是序列列表和它们的描述列表。
def parse_fasta (lines):
descs = []
seqs = []
data = ''
for line in lines:
if line.startswith('>'):
if data: # have collected a sequence, push to seqs
seqs.append(data)
data = ''
descs.append(line[1:]) # Trim '>' from beginning
else:
data += line.rstrip('\r\n')
# there will be yet one more to push when we run out
seqs.append(data)
return descs, seqs
这不是特别优雅,但应该可以帮助您入门。更好的设计是 return 一个(描述,数据)元组列表,其中描述及其数据紧密耦合在一起。
descriptions, sequences = parse_fasta(open('file', 'r').read().split('\n'))
代码中的 sys.stdin
循环似乎没有做任何有用的事情。
我有一个文本文件:
>name_1
data_1
>name_2
data_2
>name_3
data_3
>name_4
data_4
>name_5
data_5
我想在一个列表中存储 header (name_1
, name_2
..) 和数据 (data_1
, data_2
.. ..) 在 Python 程序的另一个列表中。
def parse_fasta_file(fasta):
desc=[]
seq=[]
seq_strings = fasta.strip().split('>')
for s in seq_strings:
if len(s):
sects = s.split()
k = sects[0]
v = ''.join(sects[1:])
desc.append(k)
seq.append(v)
for l in sys.stdin:
data = open('D:\python\input.txt').read().strip()
parse_fasta_file(data)
print seq
这是我试过的代码,但我无法得到答案。
最根本的错误是试图访问其范围之外的变量。
def function (stuff):
seq = whatever
function('data')
print seq ############ error
您无法访问 function
之外的 seq
。这样做的通常方法是让 function
return 一个值,并将它捕获在调用者的一个变量中。
def function (stuff):
seq = whatever
return seq
s = function('data')
print s
(我特意在函数内外使用了不同的变量名,在function
里面你不能访问s
或者data
,在外面,你不能访问[=20= ...
除此之外,我们可以尝试编写一个函数,其中 return 是序列列表和它们的描述列表。
def parse_fasta (lines):
descs = []
seqs = []
data = ''
for line in lines:
if line.startswith('>'):
if data: # have collected a sequence, push to seqs
seqs.append(data)
data = ''
descs.append(line[1:]) # Trim '>' from beginning
else:
data += line.rstrip('\r\n')
# there will be yet one more to push when we run out
seqs.append(data)
return descs, seqs
这不是特别优雅,但应该可以帮助您入门。更好的设计是 return 一个(描述,数据)元组列表,其中描述及其数据紧密耦合在一起。
descriptions, sequences = parse_fasta(open('file', 'r').read().split('\n'))
代码中的 sys.stdin
循环似乎没有做任何有用的事情。