美文网首页
用biopython 从NCBI下载数据——《生物信息学》樊龙江

用biopython 从NCBI下载数据——《生物信息学》樊龙江

作者: 学生信的大叔 | 来源:发表于2021-12-01 07:32 被阅读0次

广告时间:如果觉得这篇文章对你有用,可以看下我的资料介绍,关注下。

代码来源:《生物信息学》樊龙江,第二版,P414

作为Python小白,本以为能直接从书上把代码抄下来直接用,然而,并不能。就有点无语。

Python注重缩进格式,但给出的脚本并没有,估计排版时给排乱了。

需要自己安装biopython模块

原书代码抄过来直接用时存在的问题:

  • for 循环对齐问题,result_handle定义行报错卡死。

  • 第一次运行只能获得一个文件,而且该文件只有第一条序列 NC_038972.1

  • 再次运行时,序列 NC_038972.1 会再次追加到输出文件中,造成结果文件只有多个序列 NC_038972.1

1. 原书中代码

2.修改后可用的代码

2.1 test_id.txt文件内容。

NC_038972.1
NC_038973.1
NC_038974.1
NC_038975.1

2.2 代码内容

大家使用的时候修改第5,6,7行代码即可。

大家使用的时候修改第5,6,7行代码即可。

大家使用的时候修改第5,6,7行代码即可。

#!/usr/bin/env python
# -*-coding:UTF-8 -*-
import os
from Bio import SeqIO, Entrez
os.chdir("E:/workspace_pycharm/Python_learning")  #设置工作路径
file_in_name = "./test_id.txt"   #存有序列下载ID的文件
file_out_name = "./result.fasta" #如果源文件已存在,则会被覆盖。open(file_out_name, 'w')
Entrez.email = 'zhengshimao007@163.com'
input_file = open(file_in_name, "r")
output_file = open(file_out_name, 'w')
for record_id in input_file:
    result_handle = Entrez.efetch(db="nucleotide", rettype="gb", id=record_id)
    seqRecord = SeqIO.read(result_handle, format='gb')
    result_handle.close()
    output_file.write(seqRecord.format("fasta")) # "fasta" "gb"
output_file.close()
input_file.close()
#应该是要有个空白行

需要修改的内容

  • 第10行,将'a' 改为'w',由'a'可创建与追加,变为'w' 可创建可覆盖。
  • 第12行,要用空格,将其放入到for循环内。最后id 是取自for循环变量。
  • 第16,17行,取消空格,放入到循环之外

因为不懂Python,更不懂biopython。自己更改的内容不多。

相关文章

网友评论

      本文标题:用biopython 从NCBI下载数据——《生物信息学》樊龙江

      本文链接:https://www.haomeiwen.com/subject/xbjdxrtx.html