基因组序列genbank格式和fasta格式批量下载
生活随笔
收集整理的這篇文章主要介紹了
基因组序列genbank格式和fasta格式批量下载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
from Bio import Entrez,SeqIO
import csv# 參數設置
Entrez.email = "example@163.com"
Entrez.tool = "exampleScript"def get_gbk(csv_file):"""從csv文件中獲取GenBank Accessions,返回基因組登記號列表(gbk_List):param csv_file: csv文件:return: 含有所有GenBank Accessions的列表"""gbk_list =[] # 存儲GenBank Accessions# 讀取csv文件csv_flie = csv.reader(open(csv_file))# 確定“GenBank Accessions”所在位置(即索引)goal_index = 0for l in csv_flie:goal_index = l.index("GenBank Accessions")break# 讀取所有組的信息找到對應的"GenBank Accessions"for line in csv_flie:gbk_list.append(line[goal_index])return gbk_listdef download_gbk(gbk_list,goal_path):"""下載提供的基因組登記號列表中對應的genbank格式基因組序列,并存儲到本地:param gbk_list: "GenBank Accessions"列表:param goal_path: gbk文件存儲路徑:return: failed_list"""# 下載失敗的基因組序列列表failed_list = []print("開始下載gbk格式基因組序列文件")for gbk_id in gbk_list:file_name = goal_path + gbk_id + ".gbk" # 指明路徑:以GenBank Accessions命名文件try:handle = Entrez.efetch(db="nucleotide",id=gbk_id,rettype="gb",retmode="text")file_handle=open(file_name,"w")file_handle.write(handle.read())file_handle.close()# handle.close()print("下載{}成功!".format(gbk_id))except:print("下載{}失敗!!!".format(gbk_id))failed_list.append(gbk_id)return failed_listdef download_fasta(gbk_list,goal_path):"""下載提供的基因組登記號列表中對應的fasta格式基因組序列,并存儲到本地:param gbk_list: "GenBank Accessions"列表:param goal_path: fasta文件存儲路徑:return: failed_list"""# 下載失敗的基因組序列列表failed_list = []print("開始下載fasta格式基因組序列文件")for gbk_id in gbk_list:file_name = goal_path + gbk_id + ".fasta" # 指明路徑:以GenBank Accessions命名文件try:handle = Entrez.efetch(db="nucleotide", id=gbk_id, rettype="fasta", retmode="text")file_handle = open(file_name, "w")file_handle.write(handle.read())file_handle.close()# handle.close()print("下載{}成功!".format(gbk_id))except:print("下載{}失敗!!!".format(gbk_id))failed_list.append(gbk_id)return failed_listdef try_again(failed_list,goal_path,rettype):"""對下載失敗的基因組序列再嘗試下載一次,返回兩次都下載失敗的對應基因組登記號列表:param failed_list: 第一次下載失敗的基因組序列列表:param goal_path: 目標路徑:return: end_failed"""end_failed = []for gbk_id in failed_list:if rettype == "gb":file_name = goal_path + gbk_id + ".gbk" # 指明路徑:以GenBank Accessions命名文件else:file_name = goal_path + gbk_id + "."+rettypetry:handle = Entrez.efetch(db="nucleotide",id=gbk_id,rettype=rettype,retmode="text")file_handle=open(file_name,"w")file_handle.write(handle.read())file_handle.close()# handle.close()print("第二次下載{}成功!".format(file_name))except:print("{}下載失敗!!,請手動下載!".format(file_name))end_failed.append(gbk_id)return end_faileddef main():# 獲取基因組登記號列表gbk_list=get_gbk("PATRIC_genome.csv")# 下載對應gbk格式基因組序列文件,并打印下載失敗的登記號failed_gbkdown=download_gbk(gbk_list,".\\gbk_file\\")failed_gbklist=try_again(failed_gbkdown,".\\gbk_file\\","gb")print("需手動下載的基因組序列(gbk格式):{}".format(failed_gbklist))# 下載對應fasta格式基因組序列文件,并打印下載失敗的登記號failed_fastadown = download_fasta(gbk_list,".\\fasta_file\\")failed_fastalist = try_again(failed_fastadown,".\\fasta_file\\","fasta")print("需手動下載的基因組序列(fasta格式):{}".format(failed_fastalist))if __name__ == '__main__':main()
補充:在下載大量基因或者文獻時,可以利用歷史記錄特性來進行搜索,Entrez 將會提前進行緩沖,提高查詢效率。
# 參數設置 Entrez.email = "example@163.com"gbk_list = get_gbk("PATRIC_genome.csv") # 將目標基因登記號上載到歷史服務器 hd_epost = Entrez.epost("nucleotide", id=",".join(gbk_list)) read_epost = Entrez.read(hd_epost)# 使用歷史特性下載基因 webenv = read_epost["WebEnv"] query_key = read_epost["QueryKey"]step = 1 # 補步長 如果需要下載大量基因,可將步長適當改大,一次性檢索多個記錄,即一個文件存儲多個記錄 failed_list = [] for start in range(0,len(gbk_list),step):file_name = gbk_list[start] + ".gbk" # 指明路徑:以GenBank Accessions命名文件try:handle = Entrez.efetch(db="nucleotide",rettype="gb", retmode="text",retstart=start, retmax=step, webenv=webenv, query_key=query_key)file_handle = open(file_name, "w")file_handle.write(handle.read())file_handle.close()# handle.close()print("下載{}成功!".format(gbk_list[start]))except:print("下載{}失敗!!!".format(gbk_list[start]))failed_list.append(gbk_list[start])總結
以上是生活随笔為你收集整理的基因组序列genbank格式和fasta格式批量下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: H5-ffmpeg.js压缩视频
- 下一篇: 修改csdn博客的名称