Also wie vorher gepostet,hab ich nur den Dreizeiler eingefügt,mehr nicht.
Wenn ich versuche zu starten kommt folgender Fehler:
Hyp.py:17: Warning: 'with' will become a reserved keyword in Python 2.6
File "Hyp.py", line 17
with open(u"%s.xdom" % fname, "r") as data:
^
SyntaxError: invalid syntax
Eventuell unterschieldiche Pythonversionen?
Danke trotzdem für die Hilfe und die Kommentare sind auhc nicht so schlecht
Es liegt sicher auch viel daran,wie gut man Code versteht. Naja und zugegeben...bin nicht ganz so erfahren damit leider
listdir- aus 2 gleichen files- daten lesen+suchen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ach so .. welche Python Version nutzt Du? Ich habe das für 2.6 implementiert. Wenn Du 2.5 nutzt kannst du das mit folgendem Hook zum Laufen bringen:
Code: Alles auswählen
from __future__ import with_statement
Jupp genau,hattest Recht,danke.
Hab wie gesagt dies eingefügt in die def main:
jedoch bekomme ich dann diesen Fehler. Werde nur nicht schlau aus der Namensvergabe.
Da Du in def get_sequence fname übergibts.Also muß ich den Filenamen vorher anpassen?
Pop_cbl10.fasta --> habe mir nur den namen des jeweiligen files ausgeben lassen
Traceback (most recent call last):
File "Hyp.py", line 73, in <module>
main()
File "Hyp.py", line 65, in main
seq = get_domains(fasta)
File "Hyp.py", line 35, in get_domains
seq = get_sequences(fname=xdom_fname)
File "Hyp.py", line 17, in get_sequences
with open(u"%s.xdom" % fname, "r") as data:
IOError: [Errno 2] No such file or directory: u'gi.xdom'
Hab wie gesagt dies eingefügt in die def main:
Code: Alles auswählen
x=os.listdir('.')
61 for fasta in x:
62 if fasta.endswith("fasta"):
63 print fasta
Da Du in def get_sequence fname übergibts.Also muß ich den Filenamen vorher anpassen?
Pop_cbl10.fasta --> habe mir nur den namen des jeweiligen files ausgeben lassen
Traceback (most recent call last):
File "Hyp.py", line 73, in <module>
main()
File "Hyp.py", line 65, in main
seq = get_domains(fasta)
File "Hyp.py", line 35, in get_domains
seq = get_sequences(fname=xdom_fname)
File "Hyp.py", line 17, in get_sequences
with open(u"%s.xdom" % fname, "r") as data:
IOError: [Errno 2] No such file or directory: u'gi.xdom'
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nein, den lese ich doch aus der "fasta"-Datein den zeilen 32 & 33 aus! Evtl. passt der RegExp da nicht. ich würde mir mal an der Stelle angucken, wie der Dateiname da aussieht (print!) Ich hab mich beim RegExpr an Deinem Bsp. orientiert - da kann schnell was schief laufen, wenn da Zeichen drin stehen, die ich nicht matche.martina hat geschrieben: jedoch bekomme ich dann diesen Fehler. Werde nur nicht schlau aus der Namensvergabe.
Da Du in def get_sequence fname übergibts.Also muß ich den Filenamen vorher anpassen?
Ah,ja nun hab ich es.
Also der Name,welcher gleich ist zwischen beiden Dateien steht nicht in der Datei,sondern ist der Dateiname-mein Fehler.
Hoffe ich kann was finden,wie man die RegExp auf den Dateiname anwendet.
Danke jedenfalls nochmal für die schnelle und super Hilfe.
Martina
Also der Name,welcher gleich ist zwischen beiden Dateien steht nicht in der Datei,sondern ist der Dateiname-mein Fehler.
Hoffe ich kann was finden,wie man die RegExp auf den Dateiname anwendet.
Danke jedenfalls nochmal für die schnelle und super Hilfe.
Martina
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Also ist die erste Zeile in den "*.fasta" Dateien sinnlos? Ok, ich dachte darüber wird die Verbindung zur zugehörigen xdom-Datei gezogen! Wenn nicht, musst Du die am besten vor der get_domains() Funktion rausfinden und dieser dann einfach mit übergeben.martina hat geschrieben:Ah,ja nun hab ich es.
Also der Name,welcher gleich ist zwischen beiden Dateien steht nicht in der Datei,sondern ist der Dateiname-mein Fehler.
Aber siehst Du, genau solche Infos sind wichtig! (ich fragte ja vorhin mal, wo ist der Bezug)
Jupp,ok hab ich mich doch nicht richtig ausgedrückt.
Also wie ich das so mit der Zeit sehe,muß ich das dann wohl noch ganz schön versuchen azupassen,da die ganzen RegExp ja auf die erste Zeile angesetzt sind-da Du verstanden hatest,daß dort die Gemeinsamkeit liegt und nicht im Dateinamen.
Dann werde ich mir noch stark den Kopf zerbrechen müssen ,geht ja nicht so schnell bei mir.
Also dann danke für die Hilfe
Also wie ich das so mit der Zeit sehe,muß ich das dann wohl noch ganz schön versuchen azupassen,da die ganzen RegExp ja auf die erste Zeile angesetzt sind-da Du verstanden hatest,daß dort die Gemeinsamkeit liegt und nicht im Dateinamen.
Dann werde ich mir noch stark den Kopf zerbrechen müssen ,geht ja nicht so schnell bei mir.
Also dann danke für die Hilfe
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Kein Problem! Aber eigentlich ist es doch nicht so schlimm! Es ist ja nur die eine Stelle, die "weg" muss.
Das sollte es doch sein.
Nun musst Du nur noch vorher eben den zugehörigen Dateinamen suchen und ihn an get_domians() mit übergeben.
Der Rest sollte dann weiterhin funzen!
Code: Alles auswählen
def get_domains(fname, xdom_fname):
with open(fname, "r") as data:
metas = data.read()
# Nun den Namen nehmen, der übergeben wird
seq = get_sequences(fname=xdom_fname)
# Sequenzen finden
seq_parts = []
for lines in re.findall(PARAMS, metas):
start, end, seq_name = lines.split()
seq_parts.append(seq[int(start): int(end)])
return seq_name, seq_parts
Nun musst Du nur noch vorher eben den zugehörigen Dateinamen suchen und ihn an get_domians() mit übergeben.
Der Rest sollte dann weiterhin funzen!
Jetzt hab ich genau das gleiche Problem wie schon einmal zu Beginn mit meinen 'alten funktionen'
er kennt das line.split nicht:
Traceback (most recent call last):
File "Hyp.py", line 95, in <module>
main()
File "Hyp.py", line 87, in main
seq_name,seq_parts = get_domains(fname,xdom_fname)
File "Hyp.py", line 33, in get_domains
start, end, seq_name = lines.split()
ValueError: need more than 1 value to unpack
habe gerade auch noch gesehen, dass er die Sequenz dh ab der 2.Zeile im fasta(sieht zb so aus AJHENDJKKMBVDTESSC), garnicht die Sequenz nimmt,sondern stattdessen hat der den Inhalt des xdom-files.
er kennt das line.split nicht:
Traceback (most recent call last):
File "Hyp.py", line 95, in <module>
main()
File "Hyp.py", line 87, in main
seq_name,seq_parts = get_domains(fname,xdom_fname)
File "Hyp.py", line 33, in get_domains
start, end, seq_name = lines.split()
ValueError: need more than 1 value to unpack
habe gerade auch noch gesehen, dass er die Sequenz dh ab der 2.Zeile im fasta(sieht zb so aus AJHENDJKKMBVDTESSC), garnicht die Sequenz nimmt,sondern stattdessen hat der den Inhalt des xdom-files.
Da steht nicht, dass er es nicht kennt, sondern dass `split()` eine Sequenz mit 1 Wert erzeugt und du mehr Namen zum Binden vergibst als Werte zum Verteilen vorhanden sind. Python sagt dir normalerweise sehr genau was das Problem ist. Anstatt die Fehlermeldung umzudeuten, müsstest du vielmehr überlegen, warum hier nur 1 Wert übrig bleibt, obwohl du ja offenbar 3 Werte erwartest.martina hat geschrieben:Jetzt hab ich genau das gleiche Problem wie schon einmal zu Beginn mit meinen 'alten funktionen'
er kennt das line.split nicht:Code: Alles auswählen
ValueError: need more than 1 value to unpack
Hi,
danke für die Info, lerne immer gern dazu. Und wie es schon heißt 'Nur aus Fehlern lernt man'
Naja deswegen wollte ich noch fragen, ob mir jemand bei der Erstellung einer Liste helfen kann.
Ich habe einen Ordner voll Dateien. Es gibt jeweils immer ein Pärchen von Dateien die zb Klaus.fasta und Klaus.758.xdom, Erna.fasta Erna.785.xdom,...usw heißen.
Wie bekomme ich eine Liste mit immer genau diesem Pärchen und wie kann ich diese dann verwenden.
Habe das Ganze schon mit
usw versucht, jedoch habe ich am Ende dann ein Kuddelmuddel, da ich immer wieder die Endung anhängen bzw splitten muß. Und es doch nicht so ganz funktioniert.
Gibt es da eine elegantere Lösung?
Ich möchte beide Dateien verwenden, dh aus Ihnen in Abhängigkeit Werte lesen (aus xdom Werte nehen um sie in fasta heraus zu filtern und in ein neues file (was genau den gleichen namen wie xdom hat,nur mit' .fa' angehängt, schreiben.
Hyperion hat mr ja schon sehr geholfen bei meinen Problemen vorher,danke nochmals
Wäre für jede weitere Hilfe,Anregung dankbar.
Martina
danke für die Info, lerne immer gern dazu. Und wie es schon heißt 'Nur aus Fehlern lernt man'
Naja deswegen wollte ich noch fragen, ob mir jemand bei der Erstellung einer Liste helfen kann.
Ich habe einen Ordner voll Dateien. Es gibt jeweils immer ein Pärchen von Dateien die zb Klaus.fasta und Klaus.758.xdom, Erna.fasta Erna.785.xdom,...usw heißen.
Wie bekomme ich eine Liste mit immer genau diesem Pärchen und wie kann ich diese dann verwenden.
Habe das Ganze schon mit
Code: Alles auswählen
name.split()
Gibt es da eine elegantere Lösung?
Ich möchte beide Dateien verwenden, dh aus Ihnen in Abhängigkeit Werte lesen (aus xdom Werte nehen um sie in fasta heraus zu filtern und in ein neues file (was genau den gleichen namen wie xdom hat,nur mit' .fa' angehängt, schreiben.
Hyperion hat mr ja schon sehr geholfen bei meinen Problemen vorher,danke nochmals
Wäre für jede weitere Hilfe,Anregung dankbar.
Martina
Code: Alles auswählen
In [13]: l = ['Klaus.fasta', 'Klaus.758.xdom', 'Erna.fasta', 'Erna.785.xdom']
In [14]: fastas = [filename for filename in l if filename.endswith('.fasta')]
In [15]: xdoms = [filename for filename in l if filename.endswith('.xdom')]
In [16]: zip(fastas, xdoms)
Out[16]: [('Klaus.fasta', 'Klaus.758.xdom'), ('Erna.fasta', 'Erna.785.xdom')]
Code: Alles auswählen
In [17]: fastas = (filename for filename in l if filename.endswith('.fasta'))
In [18]: xdoms = (filename for filename in l if filename.endswith('.xdom'))
In [19]: from itertools import izip
In [20]: merged = izip(fastas, xdoms)
In [21]: merged
Out[21]: <itertools.izip object at 0xa119b4c>
In [22]: for elem in merged: print elem
....:
('Klaus.fasta', 'Klaus.758.xdom')
('Erna.fasta', 'Erna.785.xdom')
Hi snafu,
vielen lieben Dank,das war genau das was ich gesucht habe.
Allerdings, sorry, aber versuche ich nun die ganze Zeit auf ein einzelnes Element eines Pärchen zurück zu greifen, dh zb Klaus.fasta in einer Funktion abarbeiten und die Ergbenisse davon dann in eine nächste Funktion übernehmen.
In dieser öffne ich Klaus.5646.xdom, um Daten hieraus als Parameter für Teile aus fasta zu verwenden. Mh...sorry etwas schief vllt.
an einem Bsp:
Klaus.fasta öffnen,sieht so aus:
>agsbdh
KDNGHJFMECINQWFFFDSKASLLLLLLLLLLLLLLLLASDDDDDDASSS
-> nur ab der zweiten Zeile lese ich die Daten aus und speichere sie in seq"".
nun öffne ich Klaus.6447.xdom,sieht so aus:
>hdhdjk
2 9 name1 78
8 20 name2 2
ich benötige wieder nur die daten ab der zweiten zeile und nur die ersten 3 elemnete aus jeder zeile.
Diese entsprechen start,stop und name
nun soll aus seq für Klaus.fasta jede zeile aus klaus578.xdom heraus gefiltert werden (dh von start,end).
in einem neuen file Klaus7895.xdom.fa (nur Endung fa wird angehangen) soll es folgendermaßen aussehen:
>name1
DNGHJFME (entspricht 2-9)
>name2
KFSNFIQWRENMEFI(entspricht 8-20)
soweit funktioniert auch schon das meiste davon.
Es wird die seq für ein fasta eingelesen zb Klaus.fasta.
Das Schreiben in ein neues files mit seqteilen aus dem xdom gelesen,funktioniert auch,
Jedoch habe ich das Problem bzw Probleme:
1.wie sage ich ihm das er nur das eine Pärchen verwenden soll und erst danach das nächste dh zuerst Klaus.fasta und Klaus765.xdom und erst daanch Erna
2.an welcher Stelle setze ich den Vergleich bzw sage ihm welches Pärchen er nehmen soll? (in die funkiton,in die main,...?
Sorry,aber irgendwie habe ich das probiert,aber es funktioniert nicht mit meiner Herangehensweise
Danke schonmal für die Hilfe, auch wenn es wahrscheinlich für alle bzw die meisten unter Euch kein Problem ist sowas zu erstellen.
Danke,Martina
vielen lieben Dank,das war genau das was ich gesucht habe.
Allerdings, sorry, aber versuche ich nun die ganze Zeit auf ein einzelnes Element eines Pärchen zurück zu greifen, dh zb Klaus.fasta in einer Funktion abarbeiten und die Ergbenisse davon dann in eine nächste Funktion übernehmen.
In dieser öffne ich Klaus.5646.xdom, um Daten hieraus als Parameter für Teile aus fasta zu verwenden. Mh...sorry etwas schief vllt.
an einem Bsp:
Klaus.fasta öffnen,sieht so aus:
>agsbdh
KDNGHJFMECINQWFFFDSKASLLLLLLLLLLLLLLLLASDDDDDDASSS
-> nur ab der zweiten Zeile lese ich die Daten aus und speichere sie in seq"".
nun öffne ich Klaus.6447.xdom,sieht so aus:
>hdhdjk
2 9 name1 78
8 20 name2 2
ich benötige wieder nur die daten ab der zweiten zeile und nur die ersten 3 elemnete aus jeder zeile.
Diese entsprechen start,stop und name
nun soll aus seq für Klaus.fasta jede zeile aus klaus578.xdom heraus gefiltert werden (dh von start,end).
in einem neuen file Klaus7895.xdom.fa (nur Endung fa wird angehangen) soll es folgendermaßen aussehen:
>name1
DNGHJFME (entspricht 2-9)
>name2
KFSNFIQWRENMEFI(entspricht 8-20)
soweit funktioniert auch schon das meiste davon.
Es wird die seq für ein fasta eingelesen zb Klaus.fasta.
Das Schreiben in ein neues files mit seqteilen aus dem xdom gelesen,funktioniert auch,
Jedoch habe ich das Problem bzw Probleme:
1.wie sage ich ihm das er nur das eine Pärchen verwenden soll und erst danach das nächste dh zuerst Klaus.fasta und Klaus765.xdom und erst daanch Erna
2.an welcher Stelle setze ich den Vergleich bzw sage ihm welches Pärchen er nehmen soll? (in die funkiton,in die main,...?
Sorry,aber irgendwie habe ich das probiert,aber es funktioniert nicht mit meiner Herangehensweise
Danke schonmal für die Hilfe, auch wenn es wahrscheinlich für alle bzw die meisten unter Euch kein Problem ist sowas zu erstellen.
Danke,Martina
Hi@ all,
ich wollte nun noch einmal Rückmeldung geben.
Soweit funktioniert snafu's Code für 2 Testbeispielen.
Jedoch habe ich nun diesen Code bzw mein ganzes Skript auf einen ganzen Ordner angwendet,wobei sich die Dateinamen teilweise nur durch Zahlen unterscheiden.
zb Klaus12.fasta ,Klaus11.fasta und ebenfalls dazugehörige Dateien mit Endung xdom zb Klaus12._10pfa.xdom, Klaus11._10pfa.xdom usw
Nun habe ich das Probelm dass alle fasta's mit xdom's willkürlich zusammen gefügt werden in der Liste
Jedoch ist dies nicht tragbar für mein Problem,da ich immer genau DAS Pärchen benötige und abarbeiten will.
Wäre für jeden weiteren Tip dankbar.
Martina
ich wollte nun noch einmal Rückmeldung geben.
Soweit funktioniert snafu's Code für 2 Testbeispielen.
Jedoch habe ich nun diesen Code bzw mein ganzes Skript auf einen ganzen Ordner angwendet,wobei sich die Dateinamen teilweise nur durch Zahlen unterscheiden.
zb Klaus12.fasta ,Klaus11.fasta und ebenfalls dazugehörige Dateien mit Endung xdom zb Klaus12._10pfa.xdom, Klaus11._10pfa.xdom usw
Nun habe ich das Probelm dass alle fasta's mit xdom's willkürlich zusammen gefügt werden in der Liste
Jedoch ist dies nicht tragbar für mein Problem,da ich immer genau DAS Pärchen benötige und abarbeiten will.
Wäre für jeden weiteren Tip dankbar.
Martina
@martina: Du könntest die `*.fasta`-Dateinamen ermitteln und dann für jeden Namen eine Suchmaske für `glob.glob()` für den dazugehörigen `*.xdom`-Namen erstellen.
Ungetestet:
Code: Alles auswählen
from glob import glob
from itertools import izip
fastas = glob('*.fasta')
xdoms = [glob('%s.*.xdom' % name.split('.')[0]) for name in fastas]
izip(fastas, xdoms)
Danke snafu,
so funktioniert es,jedoch kann ich komischerweise nicht auf das jeweilige xdom-elemnt nicht zugreifen.
ich habe ne schleife mit
diese wird auch ausgeführt, jedoch bekomme ich die dazugehörige xdom datei nicht geöffnet bzw bearbeitet
ich habe schon hin und her probiert, mit Einrückung usw,jedoch funktioniert es nicht.
Kann mir eventuell nochmal jemand helfen
,sorry
so funktioniert es,jedoch kann ich komischerweise nicht auf das jeweilige xdom-elemnt nicht zugreifen.
ich habe ne schleife mit
Code: Alles auswählen
if filename.endswith('fasta'):
ich habe schon hin und her probiert, mit Einrückung usw,jedoch funktioniert es nicht.
Kann mir eventuell nochmal jemand helfen
,sorry