2017-11-05 3 views
0

Ich arbeite an einem Programm und eine der Funktionen besteht darin, eine Fasta-Datei nach ID zu sortieren. Die Funktion wird wie folgt beschrieben:Warum gibt Python einen Fehler, der besagt, dass es sich um einen Ordner handelt, wenn es sich um eine Datei handelt?

def sorting_files(output,my_fasta_file, sample_name): 
    #to sort the fasta file that contain all the genes 
    my_file=open(my_fasta_file) 
    input_handle=(my_file,'rU') 
    fasta_file=SeqIO.parse(input_handle, 'fasta') 
    sorted_fasta_file=(record for record in sorted(fasta_file, key=lambda x : x.id)) 
    sorted_file=SeqIO.write(sorted_fasta_file, output + 'sorted_' + sample_name +'.fa', 'fasta') 
    return sorted_file 

Dann nenne ich die Funktion von der Haupt als:

 #to sort the fasta file 
    def main():  
     folders=sorted(glob.glob(opts.input_file +'/*_velvet'))   
     for folder in folders: 
      my_fasta_file=glob.glob(folder +'/H*.fa') 
      print my_fasta_file 
      #sys.exit() 
      sorted_file=sorting_files(my_fasta_file,output,sample_name) 
      print 'The fasta file has been sorted, hoooray!' 
    main() 

When it prints my_fasta_file it prints: 

['/home/path_to_file/velvet_file/sample_name_velvet/sample_name.fa'] 

Aber ich erhalte die folgende Fehlermeldung:

File "model.py", line 82, in sorting_files 
    my_file=open(my_fasta_file) 
IOError: [Errno 21] Is a directory: '/home/path_to_files/velvet_file/sample-name_velvet/' 

Ich verstehe nicht, aus, wo der Fehler ist. Jede Hilfe wird sehr geschätzt. Danke,

Antwort

1

Ich denke, dass Fehler in Ihrem Code mit der Reihenfolge Ihrer Argumente kommt.

def sorting_files(output,my_fasta_file, sample_name): 
    ... 
sorted_file=sorting_files(my_fasta_file,output,sample_name) 

Sie setzen output wo my_fasta_file sollte und vicersa gehen. Ich weiß nicht, was output ist in Ihrem Code, aber meine Vermutung ist, dass es das Verzeichnis ist '/home/path_to_files/velvet_file/sample-name_velvet/'

+0

Danke, folgte Ihrem Vorschlag und es funktioniert perfekt. Ich lerne Python und dachte, dass die Reihenfolge nicht wichtig ist. Immer lernen. – Ana

+1

Die Reihenfolge ist nicht wichtig, wenn Sie nur Schlüsselwortargumente verwenden. Für den Rest ist die Reihenfolge wichtig. – rodgdor

Verwandte Themen