PTT Datein einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

Also erstmal...

ja ich bin sicher das ich mit dem einlesen kein Problem haben werde da ich schon Module für FastA und andere Formate geschrieben habe.

ich denke mit euren Tipps und dem abschließenden Post werde ich es wohl irgendwie auf die Reihe bekommen die File vernünftig einzulesen.
Falls nicht werd ich mich hier an dieser Stelle einfach nochmal melden.


Grüße

Phill
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

Hallo...

soweit läuft nun alles ich habe nur ein Problem und zwar bekomme ich wenn ich das hier compile:

Code: Alles auswählen

class Fasta(object):

    """Imports a FastA-File to an internal object"""

    

    head = ""

    sequence = ""

    

    def importfasta(self, myfile):

        myfasta = file(myfile, 'r')

        #read the first line (header)

        header = myfasta.readline()
		seqline = myfasta.readline()        
		firstchar = currline[0]

        #is file a fasta file?

        if firstchar != ">":

            print"No Fasta file given"

        else:

        #read the file up to next Header or up to EOF

            while seqline != "" and seqline[0] != ">":

                seqline = myfasta.readline()

                seqline = seqline.strip()

                self.sequence += seqline

            # close the stream

            myfasta.close()

            #get chars to uppercase

            self.sequence = self.sequence.upper()

        genome.setSequence(self.sequence)

diesen Fehler:
phil@tux-user:~/GenomeViewer$ python View.py
Traceback (most recent call last):
File "View.py", line 14, in <module>
from TreeView import TreeView
File "/home/phil/GenomeViewer/TreeView.py", line 3, in <module>
import Imports
File "/home/phil/GenomeViewer/Imports.py", line 23
seqline = myfasta.readline()
^
IndentationError: unexpected indent <----


Ich habe aber keine Ahnung woran es liegt... ich denke doch das alles richtig eingerückt etc ist...



Gruß Phill
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nein, in der importfasta-Methode vermischt du Leerzeichen und Tabs. Zur Einrückung solltest du immer vier Leerzeichen pro Ebene benutzen und ggf. deinen Editor so umstellen, dass er aus einem Tab vier Leerzeichen macht.

Edit: Noch ein paar Anmerkungen:
- etwas weniger Leerzeilen wären nicht schlecht
- sicher, dass "head" und "sequence" Klassenvariablen sein sollen und nicht zu einer Instanz von Fasta gehören?
- Dateien solltest du mit "open" öffnen und nicht mit "file"
- Kommentare wie "get chars to uppercase" kannst du dir sparen. Sie sollen die Befehle nicht noch einmal in Worten beschreiben, sonder was allgemein passiert und Unterstützung beim Verständnis liefern.
- das Kommentar in Zeile 32 solltest du auf die richtige Ebene verschieben.
Das Leben ist wie ein Tennisball.
BlackJack

Ergänzend zu EyDu: Wo kommen `currline` und `genome` her?

Ob eine Zeichenkette mit einem bestimmten Präfix beginnt, würde ich mit der `startswith()`-Methode auf Zeichenketten prüfen.

Wenn es *keine* "fasta"-Datei ist, schliesst Du die Datei nicht wieder.

Aus der ``while``-Schleife würde ich eine ``for``-Schleife machen, die bei entsprechender Bedingung mit ``break`` verlassen wird. Oder man könnte mit den Funktionen aus `itertools` arbeiten. Ungetestet:

Code: Alles auswählen

from itertools import takewhile


def is_not_fasta_header(line):
    return not line.startswith('>')


class Fasta(object):

    def import_fasta(self, filename):
        lines = open(filename, 'r')

        header = myfasta.next()
        if is_not_fasta_header(header):
            raise ValueError('No Fasta filename given')
        
        self.sequence = ''.join(s.strip().upper()
                                for s in takewhile(is_not_fasta_header, lines))
        lines.close()
        # genome.setSequence(self.sequence)
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

hey danke für die Tipps... ich denke so ist der Code schöner und kürzer.
genome ist ein Instanz einer anderen Klasse die Global in dem Modul erstellt wird da nicht nur FastA Datein eingelesen werden müssen.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Habt ihr vielleicht auch mal überlegt für dieses Projekt eine Datenbank zu nutzen? Meiner Meinung nach sprechen folgende Punkte dafür.
  • relative viele Daten
  • Daten bereits in einer Tabellenstruktur vorhanden
  • scheint sich um ein größeres Projekt zu handeln, bei dem SQL später vielleicht einmal noch sehr nützlich sein kann
phill
User
Beiträge: 34
Registriert: Donnerstag 21. Mai 2009, 12:04
Kontaktdaten:

Hey,

ja wir haben überlegt das ganze direkt an die NCBI Datenbank zu koppeln. Bis jetzt ist aber noch nicht raus ob das überhaupt gewünscht ist. Sinnvoll wäre es aber in unseren Augen auch. Die Entscheidung liegt aber nicht bei uns. Falls es aber so kommt darf ich mich dann mal an dich wenden wegen SQL? ;)


gruß


phill
Antworten