我创建了上面的脚本来从数据库中删除不需要的基因。如果您只使用一次,它确实工作得很好,但是我重新运行它,它会给我一个错误消息,例如: 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()
问题出在
shutil.move
行—如果指定源和目标的完整路径,则会覆盖现有文件,并且不会出现此错误;如果不想覆盖并且需要两个文件,则只需将目标文件重命名为其他文件即可。你知道吗我想要的是,当脚本发现要删除该文件时,将其存储到其他地方,以便稍后检查。我遇到的问题是,如果在同一个文件中有两个不需要的seq,它将通过我并错误地告诉我目标上已经存在该文件,然后停止。所以我设法通过添加if语句来解决这个问题。更正后的脚本如下:
通过添加第三个“if”语句,一旦发现不需要的序列,文件就会被删除,将文件删除到目标位置,然后移动到下一个文件。你知道吗
相关问题 更多 >
编程相关推荐