如何用Python3从UniProt批量下载序列至单个FASTA文件
实现多UniProt序列写入单个FASTA文件的Python脚本修改
以下是修改后的完整脚本,解决了原脚本生成大量独立文件的问题,将所有下载的序列统一写入单个FASTA文件:
import requests # 读取accession号列表,过滤空行 with open('testfasta.txt', 'r') as infile: accessions = [line.strip() for line in infile if line.strip()] count = 0 # 打开统一的输出FASTA文件(wb模式支持二进制内容写入) with open('combined_uniprot_sequences.fa', 'wb') as outfile: for acc in accessions: # 构造UniProt REST API请求URL url = f'https://rest.uniprot.org/uniprotkb/{acc}.fasta' response = requests.get(url) # 验证请求是否成功,避免无效内容写入 if response.status_code == 200: outfile.write(response.content) # 添加换行符确保不同FASTA条目间格式规范 outfile.write(b'\n') count += 1 else: print(f"序列 {acc} 下载失败,状态码:{response.status_code}") print(f"成功下载并写入的序列总数 = {count}")
关键改动说明
- 统一文件管理:将输出文件的打开操作移至循环外部,通过
with语句自动管理文件生命周期,避免频繁IO操作的开销 - 输入数据优化:用列表推导式读取并过滤空行,确保只处理有效的accession号
- 错误处理增强:添加响应状态码检查,跳过下载失败的条目并给出提示,保证输出文件的有效性
- 格式规范维护:每个序列写入后追加换行符,确保多个FASTA条目之间的格式符合标准
内容的提问来源于stack exchange,提问作者Irfan
相关产品推荐
相关产品推荐

