我使用BioPython Entrez / SeqIO模块编写了一个脚本来从NCBI中获取序列并将它们写入文件。
我遇到的问题是,一个含有约60,000个结果的术语仅在最终文件中产生了37,000个序列。此外,当我使用ls -lth时,最终输出文件的大小每1兆字节只更新一次,为什么不动态更新?或者是动态更新,但服务器没有显示它?
编辑:我还应该注意到这个脚本适用于大约10个其他搜索,一个有~70,000个序列,其余有~1000个序列。它没有使用的搜索词是:txid6200 [有机体:exp]在'蛋白质'数据库
以下是代码(也有人知道是否有更有效的方法来执行此操作?SeqIO每次都会覆盖" currentseqs"文件,所以我通过将所有内容连接到一起来解决这个问题不同的输出文件):
# command line usage: python entrez.py database searchterm output.fasta
from Bio import Entrez, SeqIO
import sys
import os
dataBase = sys.argv[1]
searchTerm = sys.argv[2]
outFile = sys.argv[3]
Entrez.email = "your.email@goes.here"
handle = Entrez.esearch(db = dataBase, retmax = 100000, term = searchTerm)
record = Entrez.read(handle)
handle.close()
with open(outFile, 'w') as w:
for id in record["IdList"]:
fetch_handle = Entrez.efetch(db = dataBase, id = id, rettype = "fasta", retmode="text")
fetch_record = SeqIO.read(fetch_handle, "fasta")
fetch_handle.close()
SeqIO.write(fetch_record, "current_seq.fasta", "fasta")
for line in open('current_seq.fasta'):
w.write(line)
os.remove("current_seq.fasta")