广告时间:如果觉得这篇文章对你有用,可以看下我的资料介绍,关注下。
代码来源:《生物信息学》樊龙江,第二版,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。自己更改的内容不多。
网友评论