Hallo zusammen...
ich versuche gerade ein Modul zu schreiben womit PTT files eingelesen werden können.
Hier ein Beispiel für PTT files:
http://www.cse.wustl.edu/~jbuhler/resea ... splay.html
wie ihr seht ist es eigentlich nur eine zeilenbasierte Textdatei.
Das Zeilenweise einlesen ist auch nicht das Problem, das Problem welches ich im Moment habe ist das die einzelnen Spalten der Datei eben auch getrennt werden müssen.
Es müsste also möglich sein z.B. unterschiedliche Listen zu erstellen die die einzelnen Spalten speichern. So das z.B. die Daten aus Zeile eins jeweils an der ersten Position der jeweiligen Liste steht etc.
so sollte es dann durchs ganze file gehen das ich nachher für jede Spalte eine List oder ähnliches habe. (müssen keine Listen sein wenn jemand nen besseren Vorschlag hat bin ich sehr dankbar!)
Wenn ich nun aus jeder Liste stelle 1 ausgeben lasse sollte die erste Zeile der eingelesenen file vollständig da sein.
Ich hab schon gesehen das es so etwas wie >>foo.split<< o.ä. gibt aber ich habe im moment noch keine Ahnung wie ich dies richtig benutzen kann.
Vielen dank für eure Hilfe..
Grüße Phill
PTT Datein einlesen
Die einzelnen Spalten sind mit Tabulatorzeichen getrennt, da kann man also prima mit dem `csv`-Modul dran gehen.
Und musst Du wirklich Listen pro Spalte haben, oder ginge auch eine Liste mit Zeilen? Das wäre Grundsätzlich nämlich erst einmal einfacher.
Und musst Du wirklich Listen pro Spalte haben, oder ginge auch eine Liste mit Zeilen? Das wäre Grundsätzlich nämlich erst einmal einfacher.
Code: Alles auswählen
for zeile in ptt:
zellen = zeile.split("\t") # oder .split(" ") falls es space-separated ist
http://www.kinderpornos.info
Und natürlich könnte man mal schauen ob Biopython das Format kennt. Man muss ja nicht das Rad neu erfinden.
schick, das kannte ich nicht. aber in der beschreibung stehen eh keine tabs.EyDu hat geschrieben:Vielleicht noch ein Hinweis auf den maxsplit-Parameter der split-Methode. Damit kannst du die Beschreibungen am Ende einer Zeile behandeln.
http://www.kinderpornos.info
hey...
danke für die schnelle antwort(en)!
also es müssen keine listen sein es soll einfach nur in nem objekt gespeichert werden können damit man die nachher weiter verwenden kann also wenn jemand ne bessere lösung hat immer raus damit!
und an biopython hab ich noch garnicht gedacht!
mfg phil
danke für die schnelle antwort(en)!
also es müssen keine listen sein es soll einfach nur in nem objekt gespeichert werden können damit man die nachher weiter verwenden kann also wenn jemand ne bessere lösung hat immer raus damit!
und an biopython hab ich noch garnicht gedacht!
mfg phil
inwiefern weiterverwenden?
so?
protein.location(10000).length
protein.PID(4711).synonym
naja auf jeden muss du die einzelnen zellen greifbar machen, dazu muss der kram erstmal in listen. wie auch immer...
so?
protein.location(10000).length
protein.PID(4711).synonym
naja auf jeden muss du die einzelnen zellen greifbar machen, dazu muss der kram erstmal in listen. wie auch immer...
http://www.kinderpornos.info
Es soll nachher so sein das ich dann z.B. das gesamte E.Coli genom darstelle (als text) und dann die Location einfärben kann. Also ich stelle das genom im textformat da und lese dann aus der liste mit den Locations die zahlen raus und färbe es ein aber erstmal mss ich das alles speichern können...
das ist ja dann schon ein etwas grösseres projekt.
jedenfalls relativ zu deinen python-skills.
du solltest das entweder jemand machen lassen, der das kann oder du musst dir erstmal die grundlagen draufschaffen.
jedenfalls relativ zu deinen python-skills.
du solltest das entweder jemand machen lassen, der das kann oder du musst dir erstmal die grundlagen draufschaffen.
http://www.kinderpornos.info
naja ich bin ja nich allein der das endprodukt nachher machen soll... und das programmieren ist glaub ich auch nicht das problem da ich in java und c(++) eigentlich fit bin. ich komm eben nur im moment mit der syntax (die wenigen klammern sind so komisch) nicht so wirklich klar und ich glaube mir fehlt einfach ein wenig der überblick was alles geht in python.
vorerst sollte aber dieses import der datei funktionieren. die einzige frage die ich nun noch habe,
schreibt ja nur in die Zellen... wie kann ich das denn nun variieren also das nach jedem tab auch in eine andere liste geschrieben wird?
vorerst sollte aber dieses import der datei funktionieren. die einzige frage die ich nun noch habe,
Code: Alles auswählen
for zeile in ptt:
zellen = zeile.split("\t")
schreibt ja nur in die Zellen... wie kann ich das denn nun variieren also das nach jedem tab auch in eine andere liste geschrieben wird?
-
- User
- Beiträge: 136
- Registriert: Sonntag 15. Januar 2006, 20:31
- Wohnort: Greifswald
- Kontaktdaten:
Hi phill,
ich bin mir nicht ganz sicher, aber ich glaube Du suchst so etwas hier:
Du erhälst so eine Liste von Listen, auf die Du wie auf ein Array zugreifen kannst:
Hilft das?
ich bin mir nicht ganz sicher, aber ich glaube Du suchst so etwas hier:
Code: Alles auswählen
zellen = [] # zellen ist jetzt eine leere Liste
for zeile in ptt:
zellen.append( zeile.split("\t") ) # jetzt wird die Liste der Einträge in jeder Zeile an die Liste zellen angehängt
Code: Alles auswählen
>>> a=[[1,2,3],[2,3,4],[4,5,6]]
>>> a
[[1, 2, 3], [2, 3, 4], [4, 5, 6]]
>>> a[1][2]
4
>>> a.append([8,9,0])
>>> a
[[1, 2, 3], [2, 3, 4], [4, 5, 6], [8, 9, 0]]
ja, python sieht erstmal seltsam aus. es wird sich auch seltsam verhalten, wenn du mit dem whitespace nicht aufpasst (nie tabs und spaces mischen).phill hat geschrieben:naja ich bin ja nich allein der das endprodukt nachher machen soll... und das programmieren ist glaub ich auch nicht das problem da ich in java und c(++) eigentlich fit bin. ich komm eben nur im moment mit der syntax (die wenigen klammern sind so komisch) nicht so wirklich klar und ich glaube mir fehlt einfach ein wenig der überblick was alles geht in python.
du solltest dir auf jedenfall _das_ tutorial durchlesen.
http://docs.python.org/tutorial/
da sieht man schon einiges. "was alles geht" in python...

ich nutze es jetzt schon einige jahre wenn ich mal ein schnelles skript brauche und stolpere immer wieder über was neues. hier sind aber auch einige die sich wirklich intensiv mit der sprache auseinandersetzen und wenn du hier code postest kriegst eigentlich immer mindestens ein sehr hilfreiches review und lernst wie man es am besten macht in python.
http://www.kinderpornos.info
-
- User
- Beiträge: 136
- Registriert: Sonntag 15. Januar 2006, 20:31
- Wohnort: Greifswald
- Kontaktdaten:
Hi phill,
ich habe mein Beispiel von oben ein wenig ausgearbeitet. Für das Verstehen ist mein Beispiel oben besser. Ausführlicher und letztlich nützlicher ist folgendes lauffähiges Programm:
Gruß,
Bernhard
ich habe mein Beispiel von oben ein wenig ausgearbeitet. Für das Verstehen ist mein Beispiel oben besser. Ausführlicher und letztlich nützlicher ist folgendes lauffähiges Programm:
Code: Alles auswählen
def startstop(zellen):
"""Liest den Zellen jeweils das erste Element aus und gibt je eine Liste der Start-
und der Endpunkte jedes Gens zurueck."""
starts = [] # enthaelt nachher die Start-Locations
stops = [] # enthaelt nachher die Stop-Locations
for zeile in zellen:
print "Gen beginnt bei ",zeile[0].split("..")[0], " und endet bei ", zeile[0].split("..")[1]
starts.append( int( zeile[0].split("..")[0] ) )
stops.append( int( zeile[0].split("..")[1] ) )
return starts, stops
zellen = [ # nur ein paar Beispieldaten als Liste aus Listen aus Strings
["90..255","+","21","16127995 thrL b0001333","..."],
["337..299","+","820","16127996 thrA b0002","..."],
["2801..3733","+","310","16127997 thrB b0003","..."],
["3734..5020","+","428","16127998 thrC b0004","..."] ]
anfaenge, enden = startstop(zellen)
print "\n\nListe der Startlocations: ", anfaenge
print "\n\nListe der Stoplocations: ", enden
Bernhard
Wobei ich gerne noch einmal darauf hinweisen möchte, dass es in der Regel sinnvoller ist die zusammengehörigen Daten einer Zeile als *ein* Objekt zu verwalten und nicht in verschiedene Listen aufzuteilen. Dann fängt man irgendwann an, sich die Daten über den Index wieder zusammen zu suchen, also so hässliche ``for i in xrange(len(eine_liste)):``-Konstrukte zu verwenden, statt direkt über die Elemente einer Liste zu iterieren.
@Bernhard: Du verwendest da IMHO *etwas* zu oft `split()` und Indexzugriffe. Das ist nicht schön, schon gar nicht in Python, wo's doch "tuple unpacking" bzw "sequence unpacking" gibt. (Was eigentlich "iterable unpacking" heissen sollte.
)
@Bernhard: Du verwendest da IMHO *etwas* zu oft `split()` und Indexzugriffe. Das ist nicht schön, schon gar nicht in Python, wo's doch "tuple unpacking" bzw "sequence unpacking" gibt. (Was eigentlich "iterable unpacking" heissen sollte.

-
- User
- Beiträge: 136
- Registriert: Sonntag 15. Januar 2006, 20:31
- Wohnort: Greifswald
- Kontaktdaten:
Das mit den gehäuften .splits gestehe ich sehr gerne zu, wobei ich davon ausgehe, dass nach einem ersten Testen der Funktion die Zeile 8 ohnehin als erstes gelöscht wird und dann bleibt nur noch die Hälfte übrig.
Das Aufteilen auf verschiedene Listen ist sicher unelegant, wahrscheinlich aber für einen C Programmierer leicht zu handeln. In jedem Fall danke für die Hinweise
. Ich bin selbst noch nicht sehr weit im Python Lernen.
Das Aufteilen auf verschiedene Listen ist sicher unelegant, wahrscheinlich aber für einen C Programmierer leicht zu handeln. In jedem Fall danke für die Hinweise

Python ist aber nun mal kein C. In Python sähe die Funktion eher so aus (ungetestet):
Code: Alles auswählen
def startstop(zellen):
"""Liest den Zellen jeweils das erste Element aus und gibt je eine Liste
der Start- und der Endpunkte jedes Gens zurueck.
"""
starts = list()
stops = list()
for start, stop in (map(int, row[0].split('..')) for row in zellen):
print 'Gen beginnt bei %d und endet bei %d.' % (start, stop)
starts.append(start)
stops.append(stop)
return starts, stops
Hallo zusammen...
erstmal vielen vielen dank für die viele resonanz.
Das Problem was ich habe ist das es ja insgesamt 5 oder 6 Spalten sind.
D.h. die Zellen die ich benutze brauchen 5 oder 6 segmente. Ich hab aber keine Ahnung wie ich diese Zellen definieren soll bzw die zuordnung einer Zeile auf das jeweilige Segment vornehme.
Gruß
erstmal vielen vielen dank für die viele resonanz.
Das Problem was ich habe ist das es ja insgesamt 5 oder 6 Spalten sind.
D.h. die Zellen die ich benutze brauchen 5 oder 6 segmente. Ich hab aber keine Ahnung wie ich diese Zellen definieren soll bzw die zuordnung einer Zeile auf das jeweilige Segment vornehme.
Gruß
Also ich zähle da 9 Spalten!? Was meinst Du mit "Zellen" und "Segmenten"? Versuch besser "Python" mit uns zu sprechen.
Da haben wir Listen und die haben Elemente.
Du brauchst doch nur bis zur ersten Datenzeile "überspringen" und kannst dann ganz einfach die Zeilen lesen, an '\t' zerteilen und diese Listen dann in eine Liste stecken. Schon hast Du eine zweidimensionale Datenstruktur.
Wenn Du mit den numerischen Werten etwas anstellen willst, musst Du die noch von Zeichenketten in Zahlen umwandeln und vielleicht aus der ersten Spalte zwei machen, oder Elemente der ersten Spalte in ein Tupel mit Start- und Endwert umwandeln.
Statt einer Liste pro Zeile könnte man vielleicht auch eine Klasse für die Datensätze schreiben.

Du brauchst doch nur bis zur ersten Datenzeile "überspringen" und kannst dann ganz einfach die Zeilen lesen, an '\t' zerteilen und diese Listen dann in eine Liste stecken. Schon hast Du eine zweidimensionale Datenstruktur.
Wenn Du mit den numerischen Werten etwas anstellen willst, musst Du die noch von Zeichenketten in Zahlen umwandeln und vielleicht aus der ersten Spalte zwei machen, oder Elemente der ersten Spalte in ein Tupel mit Start- und Endwert umwandeln.
Statt einer Liste pro Zeile könnte man vielleicht auch eine Klasse für die Datensätze schreiben.
-
- User
- Beiträge: 136
- Registriert: Sonntag 15. Januar 2006, 20:31
- Wohnort: Greifswald
- Kontaktdaten:
BlackJack voll zustimmend, will ich noch mal den Versuch einer Klärung auf einer anderen Ebene, nämlich der Aufgabenstellung aus dem ersten Post machen:
BlackJack hat vorgeschlagen, die Daten in einer Klasse zu hinterlegen.
Soweit wir Dich verstanden haben, sind die Aufgaben gelöst. Ohne eine präzisere und verständlichere Problembeschreibung (nicht: Problemandeutung) wird es also nicht weiter gehen.
Gruß,
Bernhard
Gut. Bist Du sicher?Das Zeilenweise einlesen ist auch nicht das Problem
Geht mit split, wie Dill gezeigt hat. Und wie man die dabei gewonnenen gesplitteten Daten speichert und nicht verliert zeigt mein allererster Code in diesem Thread.das Problem welches ich im Moment habe ist das die einzelnen Spalten der Datei eben auch getrennt werden müssen.
Aus einer Spalte im Originalfile eine Liste machen. Der von mir weniger elegant gepostete und von BlackJack verfeinerte Code macht aus der ersten Spalte zwei Listen: Eine mit dem Anfangsbasenpaar und eine mit dem Ende-Basenpaar. Anhand dieses Beispiels kannst Du doch bestimmt für die verbleibenden acht Spalten selbst den Code schreiben, dass daraus auch jeweils Listen werden.Es müsste also möglich sein z.B. unterschiedliche Listen zu erstellen die die einzelnen Spalten speichern.
...und das ist schon vorbereitet, weil die zitierte Funktion Dir bereits die Locations als Integer zurückgibt.und lese dann aus der liste mit den Locations die zahlen raus
Du kannst alternativ die Daten in der im Code als "zellen" beschriebenen Form behalten und auf jedes Element zugreifen, wie ich es in meinem ersten Post anhand der Liste "a" vorgemacht habe. Kommt darauf an, was Du nachher damit machen willst.müssen keine Listen sein wenn jemand nen besseren Vorschlag hat bin ich sehr dankbar!)
BlackJack hat vorgeschlagen, die Daten in einer Klasse zu hinterlegen.
Soweit wir Dich verstanden haben, sind die Aufgaben gelöst. Ohne eine präzisere und verständlichere Problembeschreibung (nicht: Problemandeutung) wird es also nicht weiter gehen.
Gruß,
Bernhard