美文网首页
用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