python脚本抛出了一个我可以处理的错误

2024-10-02 18:14:39 发布

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

我创建了上面的脚本来从数据库中删除不需要的基因。如果您只使用一次,它确实工作得很好,但是我重新运行它,它会给我一个错误消息,例如: shutil.错误:目标路径'path/rejected\u database\u genes/gene\u A.fa'已存在 显然它停止了。我认为当文件中有两个或更多的基因需要删除时,问题就出现了。 谨致问候,谢谢你的帮助。你知道吗

import glob, sys, os, shutil
from Bio import SeqIO, SearchIO
from Bio.SeqRecord import SeqRecord
import argparse

def help_function():
    print 'Hi'
parser = argparse.ArgumentParser()
parser.add_argument('-input_file', '-i',type=str,help='path_to_data')
opts = parser.parse_args()  

def check_file_exists(filepath, file_description):
    if not os.path.exists(filepath):
        print("The " + file_description + " (" + filepath + ") does not exist")
        sys.exit(1)
    else:
        print file_description + " detected"

def remove_empty_files(alleles_files,destination):
    input_handle=open(alleles_files, 'r')
    gene_records=list(SeqIO.parse(input_handle, 'fasta'))

    for gene_record in gene_records:
        #filename=gene_record.id[0]
        #count=0
        if len(gene_record.seq)<5 or 'N'in gene_record.seq:
            print gene_record.id
        elif '-' in gene_record.seq:
            print gene_record.id
            #count+=1
            shutil.move(alleles_files, destination)

def main():
    destination=opts.input_file + '/rejected_database_genes'
    if os.path.exists(destination):
        print 'Folder already exits'
    else:
        os.makedirs(destination)
        print 'Folder has been created'
    files=glob.glob(opts.input_file+'/*.fa')
    #print files
    #sys.exit()     
    for f in files:
        #print f
        #sys.exit()
        alleles_files=glob.glob(f)[0]
        #print alleles_files
        #sys.exit()         
        remove_empty_files(alleles_files,destination)
    print 'Files have been removed'
main()

Tags: pathimportinputosdefsysexitfiles
2条回答

问题出在shutil.move行—如果指定源和目标的完整路径,则会覆盖现有文件,并且不会出现此错误;如果不想覆盖并且需要两个文件,则只需将目标文件重命名为其他文件即可。你知道吗

我想要的是,当脚本发现要删除该文件时,将其存储到其他地方,以便稍后检查。我遇到的问题是,如果在同一个文件中有两个不需要的seq,它将通过我并错误地告诉我目标上已经存在该文件,然后停止。所以我设法通过添加if语句来解决这个问题。更正后的脚本如下:

import glob, sys, os, shutil
from Bio import SeqIO, SearchIO
from Bio.SeqRecord import SeqRecord
import argparse

def help_function():
    print 'Hi'
parser = argparse.ArgumentParser()
parser.add_argument('-input_file', '-i',type=str,help='path_to_data')
opts = parser.parse_args()  

def check_file_exists(filepath, file_description):
    if not os.path.exists(filepath):
        print("The " + file_description + " (" + filepath + ") does not exist")
        sys.exit(1)
    else:
        print file_description + " detected"

def remove_empty_files(alleles_files,destination):
    input_handle=open(alleles_files, 'r')
    gene_records=list(SeqIO.parse(input_handle, 'fasta'))
    geneID_list=[]
    for gene_record in gene_records:
        filename=gene_record.id.split('_')
        geneID=filename[0]+'_'+filename[1]  
        if len(gene_record.seq)<5 or 'N'in gene_record.seq:
            geneID_list.append(geneID)
            shutil.move(alleles_files, destination)
            print geneID_list
        #break              
        if '-' in gene_record.seq:
            geneID_list.append(geneID)
            shutil.move(alleles_files, destination)
            print geneID_list
        #break  
        if len(geneID_list) >0:
            break                   

def main():
    if len(sys.argv) <=1:
        parser.print_help()
        sys.exit()
    else:
        check_file_exists(opts.input_file, 'input_file')

    destination=opts.input_file + '/rejected_database_genes'
    if os.path.exists(destination):
        print 'Folder already exits'
    else:
        os.makedirs(destination)
        print 'Folder has been created'
    files=glob.glob(opts.input_file+'/*.fa')
    #print files
    #sys.exit()     
    for f in files:
        #print f
        #sys.exit()
        alleles_files=glob.glob(f)[0]
        #print alleles_files
        #sys.exit()

        remove_empty_files(alleles_files,destination)
    print 'Files have been removed'
main()

通过添加第三个“if”语句,一旦发现不需要的序列,文件就会被删除,将文件删除到目标位置,然后移动到下一个文件。你知道吗

相关问题 更多 >