Seite 1 von 1

tempfile - prefix setzt zusätzliche Zeichen

Verfasst: Freitag 1. Februar 2008, 09:04
von ete
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

Verfasst: Freitag 1. Februar 2008, 09:38
von Zap
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.

Verfasst: Freitag 1. Februar 2008, 09:46
von Rebecca
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.

Verfasst: Freitag 1. Februar 2008, 10:32
von Zap
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.

Verfasst: Freitag 1. Februar 2008, 10:51
von ete
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...

Verfasst: Freitag 1. Februar 2008, 10:55
von veers
Bist du dir sicher dass du nicht einen StringIO verwenden kannst? :)

Verfasst: Freitag 1. Februar 2008, 12:18
von ete
Ich kannte StringIO vorher nicht, danke. Kann man dort die Fileendung angeben? Diese muss .fasta sein...