tempfile - prefix setzt zusätzliche Zeichen

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.
Antworten
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Hallo!

Ich habe ein tempfile erstellt und kann auch den String auslesen. Doch wenn ich ihn einen prefix vorschreibe, setzt er einige Zeichen einfach dazu (ohne Logik).

Bsp:
tmp = tempfile.NamedTemporaryFile(suffix = '.fasta', prefix = 'temptest')

Das file heisst dann aber z.B. temptestsdek3g.fasta

Ich kann zwar den Inhalt ausgeben aber nicht damit weiterarbeiten (ich möchte über Biopython mit clustalw ein alignment machen, mit einer von mir erstellten fasta Datei gehts ohne Probleme).

Mein Code:

Code: Alles auswählen

import tempfile 

tmp = tempfile.NamedTemporaryFile(suffix = '.fasta', prefix = 'temptest',
        dir = 'J:\Blast\Alignment') 
tmp.write(">1" + '\n' + 'atgctccgct' + '\n' + ">2" + '\n' + 'tccgct' ) 
tmp.seek(0) 
string = tmp.read() 
print string 
Kann jemand weiterhefen?

liebe Grüsse
Stefanie
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Die "tolle" Eigenschaft von Tempfile ist die, dass es versucht eindeutige Namen zu vergeben. Und wenn schon ein 'temptest.fasta' existiert wird der prefix durch zufällige Characters erweitert. (vielleicht sogar dann wenn es noch nicht existiert)

Ich Frage mich warum du überhaupt Tempfile an der Stelle nutzt wenn du einen konkreten Namen und sogar das konkrete Verzeichnis vorgibst :?:

PS: Nur damit du Tempfile nicht falsch verstehst. Gelöscht wird die Datei nie automatisch, das muss man schon selber vornehmen.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Zap hat geschrieben:Die "tolle" Eigenschaft von Tempfile ist die, dass es versucht eindeutige Namen zu vergeben. Und wenn schon ein 'temptest.fasta' existiert wird der prefix durch zufällige Characters erweitert. (vielleicht sogar dann wenn es noch nicht existiert)
Der Name ist immer prefix + 6 zufaellige Zeichen + suffix.
PS: Nur damit du Tempfile nicht falsch verstehst. Gelöscht wird die Datei nie automatisch, das muss man schon selber vornehmen.
Also bei mir unter Linux ist so eine Datei, nachdem man close() ausfuehrt, nicht mehr aufzufinden. Die Doku schweigt sich zu dem Thema aus.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Ok, mein Fehler.
Wusste nicht das sich die Methoden darin unterschiedlich verhalten.

Code: Alles auswählen

In [4]: tempfile.mkstemp?
...
Caller is responsible for deleting the file when done with it.

In [5]: tempfile.NamedTemporaryFile?
...
Returns an object with a file-like interface; the name of the file
is accessible as file.name.  The file will be automatically deleted
when it is closed.
@ Ete: Für dich ist es vieleicht von Nutzen, dass bei dem file-Objekt von NamedTemporaryFile,
über das Attribut 'name' an den generierten Namen kommst.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Ja ok, dann versuch ich's über den generierten Namen.

Grund: ich habe meherer (bis hundert) Files die ich mit clustalw über Biopython alignen möchte. clustalw erlaubt aber leider nur Zugriff auf files...

Falls jemand ne andere Idee hat, nur raus...
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Bist du dir sicher dass du nicht einen StringIO verwenden kannst? :)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Ich kannte StringIO vorher nicht, danke. Kann man dort die Fileendung angeben? Diese muss .fasta sein...
Antworten