Seite 1 von 1

Mehrere FASTA-Dateien gleichzeitig öffnen

Verfasst: Montag 12. November 2007, 20:12
von skanami
Hallo an alle,
kennt sich jemand mit BioPython aus? Hab da folgendes Problem:
Ich möchte den Inhalt von mehreren Dateien gleichzeitig bzw. mit einem Klick (soll über ein Button von Win.Forms gestartet werden) öffnen und mit dessen String-Inhalten operieren.
Leider erhalte ich folgendes Ergebnis :

>>>
asfs
ref|NT_011630.14|HsX_11787:c1015409-1012292
Seq('ATCCCCATCCCGTGGAGTGGCCGGCGACAAGATGGCAGCAGCGTGTCGGAGCGTGAAGGT ...', SingleLetterAlphabet())
3118
ref|NT_011630.14|HsX_11787:c1015409-1012292
Seq('ATCCCCATCCCGTGGAGTGGCCGGCGACAAGATGGCAGCAGCGTGTCGGAGCGTGAAGGT ...', SingleLetterAlphabet())
3118
ref|NT_011630.14|HsX_11787:c1015409-1012292
Seq('ATCCCCATCCCGTGGAGTGGCCGGCGACAAGATGGCAGCAGCGTGTCGGAGCGTGAAGGT ...', SingleLetterAlphabet())
3118

Traceback (most recent call last):
File "C:\Users\Anami\Desktop\Projekt Biopython Softwareentwicklung\Methoden\fastaread3", line 23, in <module>
fastaread()
File "C:\Users\Anami\Desktop\Projekt Biopython Softwareentwicklung\Methoden\fastaread3", line 16, in fastaread
handle = open(fliste)
IOError: [Errno 2] No such file or directory: ''


Mein Source Code lautet dabei :


Code: Alles auswählen

from Bio import SeqIO

def fastaread() :

    
    
    eingabe = raw_input("asfs")
    
    f = open("d:\\FastaFiles.txt")
    entryf = f.readline()
    fliste = entryf.split("_*_#_")  # Erzeugt Liste mit den ausgewählten Pfaden für FASTA-Files
    
    for i in range(0, len(fliste)):
        sequenz = fliste[i]
        
        handle = open(fliste[i]) 
        for seq_record in SeqIO.parse(handle, "fasta"):
            print seq_record.id
            print seq_record.seq
            print len(seq_record.seq)
        
        
fastaread()
Ich verstehe nicht (noch Anfänger wie man merkt) warum ich nicht mit ner einfachen for schleife das "i" als Position in der Liste durchlaufen kann.
jedes Item in der Liste ist übrigens ein Pfad für eine FASTA-Datei. z.B. d:\\dna.fasta
ich will alle dateien ueber die Pfadinformation in der Textdatei öffnen um dann hinter mit deren Inhalten untereinander operieren zu können.
Die Fasta Dateien beinhalten DNA-Sequenzen verschiedener Enzyme die ich untereinander vergleichen möchte über einen Algorithmus um den Verwandtschaftsgrad zu bestimmen. Gib es für das öffnen mehrere Dateien mehr zu beachten `? Die Ausgabe
IOError: [Errno 2] No such file or directory:
kapier ich nicht da die Txt Datei vorhanden ist und dessen inhalt auch Pfade enthält.
Vielen Dank im voraus bei dem der mir da weiterhelfen kann.

Verfasst: Montag 12. November 2007, 20:36
von Rebecca
Du hast doch schon ein paar Postst in diesem Forum hinter dir. Hast du dich noch nie gewundert, warum bei anderen der Python-Code immer so huebsch formatiert ist?

EDIT: OK, hat sich erledigt. :)

Verfasst: Montag 12. November 2007, 20:41
von BlackJack
Schau Dir nochmal die Fehlermeldung an. Da wird der Dateiname angegeben von der Datei, die nicht geöffnet werden konnte: ''. Also hast Du in der Liste eine leere Zeichenkette und so eine Datei gibt es ganz bestimmt nicht. Schau Dir mal den Inhalt von `fliste` an.

Das mit dem `i` ist zu umständlich. Du kannst auch *direkt* über die einzelnen Elemente der Liste iterieren:

Code: Alles auswählen

    for filename in fliste:
        # ...
Dateien die man öffnet sollte man auch wieder schliessen wenn man sie nicht mehr benötigt.

`eingabe` und `sequenz` werden nicht verwendet, wenn ich das richtig sehe.

Und wer kam auf dieses komische Format um Dateinamen in eine Zeile zu quetschen. Der gehört geteert und gefedert. :-)

Verfasst: Montag 12. November 2007, 21:04
von skanami
jo eingabe habe ich nur eingefügt damit sich das programm einfach nur nach eingabe startet.
sequenz ist überflüssig stimmt auch.

aber wieso gibt es so eine datei ganz bestimmt nicht? in meiner Datei sollte das stehen was ich erwarte und das tuts auch, ist schliesslich nur ne text datei und fliste ist auch nicht leer die Pfade aus der Textdatei werden uebernommen hab diese auch mal ohne die Schleifen ausgeben lassen ohne die "_*_#_" zeichen, denn diese trennen die pfade.
die Idee die Pfade in eine Zeile zu quetschen ist von mir ;) wahrscheinlich doof, aber hab keine andere möglichkeit gefunden, über eine winapplikation, die die fasta files auswählt eine verbindung zu meinem Python programm aufzubauen. Die Textdatei dient sozusagen als Kommunikationsmittel. bin leider nur seit 2 wochen mit dem programmieren dabei und kenn noch nicht allzuviele möglichkeiten.
IronPython wollte ich vermeiden...

Verfasst: Montag 12. November 2007, 21:49
von BlackJack
Ich weiss nicht ob Du das Problem verstanden hast. Die Liste enthält den Dateinamen '', also ohne die Anführungszeichen -- einen Dateinamen ohne Zeichen -- Länge == 0. So eine Datei kann man unter den meisten Dateisystem nicht einmal anlegen.

Wenn ich mal raten müsste:

Code: Alles auswählen

In [91]: 'spam#eggs#ham#'.split('#')
Out[91]: ['spam', 'eggs', 'ham', '']
Du siehst den letzten Eintrag in der Liste!? Du hast wahrscheinlich den Trenner nicht zwischen den Pfaden sondern hinter jedem Pfad, also auch hinter dem letzten. Und dahinter ist sozusagen eine leere Zeichenkette.

Verfasst: Dienstag 13. November 2007, 15:01
von skanami
Jo habs hinterher noch geschnallt. thx
hab aber auch rausgefunden dass hinter biopython noch weitere methoden bereitstehen die das ganze vereinfachen. Falls hier jemand sich gut mit biopython auskennt...würde ich gerne die threads lesen.