程序在不存在时停止运行,是否在for循环中尝试?

2024-05-17 13:54:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过添加后缀从登录中下载:for循环运行良好,即我设法下载序列,直到这个url不存在并且执行停止。所以我希望,如果这个url不存在,脚本将完成运行。 此外,我还想请把所有的输出文件放在一个文件夹中,该文件夹中的物种名称写在“输入”中。谢谢你。以下是脚本的一部分:

species = input("Bacteria species ? : ")
TypeSeq= input ("fna ? or faa ? :")   

species = input("Bacteria species ? : ")
TypeSeq= input ("fna  ? ou faa  ?")   

if data["#Organism/Name"].str.contains(species, case = False).any():

    print(data.loc[data["#Organism/Name"].str.contains(species, case = False)]['Status'].value_counts())  
    FTP_list = data.loc[data["#Organism/Name"].str.contains(species, case = False)]["FTP Path"].values

if  TypeSeq == "faa" : 
        try : 
            for url in FTP_list:
                 
                parts = urllib.parse.urlparse(url)
                parts.path
                posixpath.basename(parts.path)
                suffix = "_protein.faa.gz"
                prefix = posixpath.basename(parts.path) 
                print(prefix+suffix)
                
                path = posixpath.join(parts.path, prefix+suffix)
                ret = parts._replace(path=path) 
                
                sequence=wget.download(urllib.parse.urlunparse(ret))
        except :
            print ("")

Tags: pathnamefalseurlinputdatapartsspecies
1条回答
网友
1楼 · 发布于 2024-05-17 13:54:49

您已将循环放在try块内,因此每当找不到url时,它就会抛出错误并移出循环,然后被except块捕获。这将停止脚本的执行。要修复它,请将try-except块放在循环中,以便在捕获错误后,它移动到下一个url

^{}函数接受一个out参数,以指定下载文件的名称或要下载文件的目录。您可以使用它将一个物种的所有输出文件放在一个文件夹中

请尝试以下代码:

import os

species = input("Bacteria species ? : ")
TypeSeq= input ("fna ? or faa ? :")   

species = input("Bacteria species ? : ")
TypeSeq= input ("fna  ? ou faa  ?")   

if data["#Organism/Name"].str.contains(species, case = False).any():

    print(data.loc[data["#Organism/Name"].str.contains(species, case = False)]['Status'].value_counts())  
    FTP_list = data.loc[data["#Organism/Name"].str.contains(species, case = False)]["FTP Path"].values

if  TypeSeq == "faa" :
    
    if not os.path.exists(species):
        os.makedirs(species)
    
    for url in FTP_list:
        try : 
            parts = urllib.parse.urlparse(url)
            parts.path
            posixpath.basename(parts.path)
            suffix = "_protein.faa.gz"
            prefix = posixpath.basename(parts.path) 
            print(prefix+suffix)

            path = posixpath.join(parts.path, prefix+suffix)
            ret = parts._replace(path=path) 

            sequence = wget.download(urllib.parse.urlunparse(ret), out=species)
        except :
            print ("")

相关问题 更多 >