我正在开发用于生物信息分析的python脚本。首先,脚本读取整个文件(.fasta –基本是一个很长的字符串)以找到所有支架(以“>”开头的行),然后打印出找到的支架数量。我有两个类似的输入文件.fasta,一个具有超过1.5GB的文件,可在一分钟内运行,另一个具有85MB的文件,耗时超过31小时。
import sys
cabecalho = []
sequencia = []
contador = -1
file_open = open('C:\PYTHON\Chr09.fasta', "r")
for line in file_open:
line = line.rstrip()
if ">" in line:
cabecalho.append(line)
contador += 1
sequencia.insert(contador, '')
else:
sequencia[contador] += line
con = contador + 1
print(con)
该如何优化此脚本的运行速度?或者如何检查文件出了什么问题(它们具有相同的格式和相同的文本配置。)
答案 0 :(得分:1)
首先,你不需要重新发明weel,Biopython可以轻松处理fasta文件,例如:
from Bio import SeqIO
myseqs = {}
fasta_sequences = SeqIO.parse(open('C:\PYTHON\Chr09.fasta'), 'fasta')
for fasta in fasta_sequences:
name, sequence = fasta.description, str(fasta.seq)
myseqs[name] = sequence
print("total sequences: "+len(myseqs))
通过这种方式,您还可以将序列作为 dict,以便通过 fasta 标头轻松访问并执行您想做的任何操作。
最后,安装 biopython 只需输入
<块引用>pip install biopython
其他不用python的方法,如果你只想知道脚手架的数量,可以在unix环境下用grep
命令一行搞定
grep -c ">" myfasta.fasta
-c 仅用于计数匹配
问候