Seite 1 von 2
tempfile - Anwendungsmöglichkeiten
Verfasst: Dienstag 13. März 2012, 16:04
von Nobuddy
Hallo zusammen,
habe hier
http://openbook.galileocomputing.de/pyt ... 19_006.htm was mit tempfile gelesen.
Allerdings wird das dort nicht ausführlicher behandelt und da mein Englisch ziemlich gleich Null ist, hoffe ich auf Eure Unterstützung.
Dies
Code: Alles auswählen
import tempfile
tmp = tempfile.TemporaryFile()
tmp.write("Hallo Zwischenspeicher")
tmp.seek(0)
ist mir, außer 'tmp.seek(0)' klar.
Was macht hier das 'tmp.seek(0)'?
Zu 'TemporaryFile' gibt es ja auch noch 'NamedTemporaryFile'.
Wäre das dann so
richt angewendet?
Wenn ich mit csv arbeite, wie ist dann die Handhabung?
Ich hoffe, Ihr könnt mir dabei helfen, mehr Klarheit zu tempfile zu bekommen.
Grüße Nobuddy
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Dienstag 13. März 2012, 17:44
von webspider
Nobuddy hat geschrieben:Allerdings wird das dort nicht ausführlicher behandelt
Das wird wohl daran liegen, dass der Konstruktor mehr als ausreichend dokumentierte Dateiobjekte zurückgibt. Der Witz an temporären Dateien ist, dass sie immer einen zufällig gewählten Dateinamen aus Sicherheitsgründen bekommen (und um nicht mit vorhandenen Dateien zu kollidieren). In dem Sinne gibt dir NamedTempfile lediglich die Möglichkeit besagten zufällig gewählten Dateinamen zu erhalten.
Nobuddy hat geschrieben:da mein Englisch ziemlich gleich Null ist
Bitte, was. Ich hoffe du redest von deinen Englischkenntnissen, die du als angehender Programmierer sowieso haben und vertiefen solltest.
Lies dir bitte also den Abschnitt der offiziellen Dokumentation durch bis du alles verstanden hast. Selbiges gilt für den Umgang mit Dateien was deine Frage nach seek angeht.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 09:09
von Nobuddy
webspider hat geschrieben:Nobuddy hat geschrieben:Allerdings wird das dort nicht ausführlicher behandelt
Das wird wohl daran liegen, dass der Konstruktor mehr als ausreichend dokumentierte Dateiobjekte zurückgibt. Der Witz an temporären Dateien ist, dass sie immer einen zufällig gewählten Dateinamen aus Sicherheitsgründen bekommen (und um nicht mit vorhandenen Dateien zu kollidieren). In dem Sinne gibt dir NamedTempfile lediglich die Möglichkeit besagten zufällig gewählten Dateinamen zu erhalten.
Nobuddy hat geschrieben:da mein Englisch ziemlich gleich Null ist
Bitte, was. Ich hoffe du redest von deinen Englischkenntnissen, die du als angehender Programmierer sowieso haben und vertiefen solltest.
Lies dir bitte also den Abschnitt der offiziellen Dokumentation durch bis du alles verstanden hast. Selbiges gilt für den Umgang mit Dateien was deine Frage nach seek angeht.
Obige Info haber ich auch gelesen.
Ich bin kein Programmierer, in dem Sinne wie Du es meinst. Da meine Englischkenntnisse wirklich nicht ausreichen, benutze ich Translater.
Glaube mir, daß ich das schon getan habe, komme da aber einfach nicht weiter.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 09:51
von snafu
Sicher, dass du unbedingt Python nutzen willst? Ich mein, Programmieranfänger sein und schlechte Englischkenntnisse haben (und offenbar auch die fehlende Bereitschaft, sie zu erlernen) sind nicht gerade die besten Startvoraussetzungen.
Nobuddy hat geschrieben:Wenn ich mit csv arbeite, wie ist dann die Handhabung?
Wenn du wirklich nur CSV-Dateien bearbeiten willst/musst, dann könnte das `csvtool` (
Ubuntu-Paket) vielleicht was für dich sein (sofern du die passende Plattform benutzt

). Das eignet sich vorwiegend zum Extrahieren bzw Modifzieren von CSV-Inhalten. Ein bißchen Bash-Kenntnisse sind da durchaus von Vorteil. Es gibt leider keine vernünftige Manpage für das Tool, aber ersatzweise erhält man mittels `csvtool --help | less` genügend Info zur Handhabung (zwar auf englisch, jedoch mit vielen Codebeispielen).
Ernsthaft: Vielleicht bist du am Ende glücklicher, wenn du Python *nicht* für die Erledigung deiner Aufgabe benutzt (ich entnehme dein mutmaßlich primäres Aufgabenfeld übrigens auch aus deinen
anderen Beiträgen).

Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 11:23
von Nobuddy
snafu hat geschrieben:Sicher, dass du unbedingt Python nutzen willst? Ich mein, Programmieranfänger sein und schlechte Englischkenntnisse haben (und offenbar auch die fehlende Bereitschaft, sie zu erlernen) sind nicht gerade die besten Startvoraussetzungen.
Nobuddy hat geschrieben:Wenn ich mit csv arbeite, wie ist dann die Handhabung?
Wenn du wirklich nur CSV-Dateien bearbeiten willst/musst, dann könnte das `csvtool` (
Ubuntu-Paket) vielleicht was für dich sein (sofern du die passende Plattform benutzt

). Das eignet sich vorwiegend zum Extrahieren bzw Modifzieren von CSV-Inhalten. Ein bißchen Bash-Kenntnisse sind da durchaus von Vorteil. Es gibt leider keine vernünftige Manpage für das Tool, aber ersatzweise erhält man mittels `csvtool --help | less` genügend Info zur Handhabung (zwar auf englisch, jedoch mit vielen Codebeispielen).
Ernsthaft: Vielleicht bist du am Ende glücklicher, wenn du Python *nicht* für die Erledigung deiner Aufgabe benutzt (ich entnehme dein mutmaßlich primäres Aufgabenfeld übrigens auch aus deinen
anderen Beiträgen).

Ja, ich will Python nutzen und es macht mir auch Spaß damit. Viele Dinge habe ich schon mit Python umgesetzt. Dank der Mithilfe anderer User, konnte ich schon Einiges umsetzen und mein Verständnis Python anzuwenden, nimmt stetig zu.
Meine Englischkenntnisse versuche ich auch zu erweitern, aber wenn man vorher kein Englisch konnte, dauert dies eben ...
Ist es wirklich so schwer für Euch als "Profi", sich in einen "Anfänger" der "fast" keine Vorkenntnisse auf diesem Gebiet hat, zu verstehen und vielleicht auch zu unterstützen?
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 11:27
von snafu
Nee, aber es ist anstrengend nem Anfänger, der kein Englisch kann, (potenziell) die Dokumentation vorlesen zu müssen. Aber gut, ich will keinen Streit anfangen. Werde mich mal wieder in meine dunkle Ecke zurückziehen...

Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 11:48
von BlackJack
@Nobuddy: Was genau ist Dir an dem ``tmp.seek(0)`` denn nicht klar? Das Kapitel im OpenBook in dem Dateiobjekte behandelt werden und wo auch die `seek()`-Methode erwähnt wird, hast Du gelesen?
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 13:39
von Nobuddy
Ok, hier
http://openbook.galileocomputing.de/pyt ... 09_003.htm bin ich fündig geworden.
Definiert die Schreib-/Leseposition innerhalb der Datei, wenn ich das richtig verstanden habe.
Ich habe einen Denkfehler gemacht, da ich wie in diesem Beispiel:
Code: Alles auswählen
# Schreibe die Daten von datenpool in filename
def write_csv(filename, datenpool):
with codecs.open(filename, "w") as zielfile:
writer = csv.writer(zielfile, delimiter="\t", quotechar="^")
writer.writerows(datenpool)
die Daten in einer Datei speichere, welche ich wieder aus einem anderen Script abrufen kann.
Was aber hier:
Code: Alles auswählen
# Schreiben in eine temporäre Datei (tmp)
def write_tmp(datenpool):
tmp = tempfile.NamedTemporaryFile()
tmp.write(datenpool)
tmp.seek(0)
string = tmp.read()
nicht der Fall ist.
Dachte zuerst, daß sich diese temporären Daten, auch aus einem anderen Script wieder abrufen lassen würden.
PS: snafu, keine Angst Streit liegt mir fern, sollte nur zum Nachdenken anregen.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 14:40
von cofi
Nobuddy hat geschrieben:Dachte zuerst, daß sich diese temporären Daten, auch aus einem anderen Script wieder abrufen lassen würden.
Das tun sie. NamedTemporaryFile hat dafuer ein `delete` Argument:
http://docs.python.org/library/tempfile ... poraryFile
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 16:36
von Nobuddy
Mir ist immer noch nicht klar, wie und wo der Name angewendet werden kann?
Ich habe dies
Code: Alles auswählen
# Schreiben in eine temporäre Datei (tmp)
def write_tmp(filename, datenpool):
tmp = tempfile.NamedTemporaryFile()
tmp.write(filename, datenpool)
tmp.seek(0)
string = tmp.read()
versucht, funktioniert aber nicht.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 16:40
von deets
Weil das ja auch konzeptioneller Bloedsinn ist. Du gibst einen Namen *REIN*, und willst gleichzeitig ein tempfile erzeugen, dass ja per definition einen zufaelligen Namen hat, damit es eben genau keine Kollision mit einem statisch definierten Namen gibt.
Ein NamedTempfile-Objekt hat einfach nur die Garantie, dass es einen Namen *GIBT*, den du nach Erzeugung ueber das Attribut ".name" abfragen kannst. Den kannst du dann zB zurueckgeben, damit du ein commandozeilne-tool damit fuetterst oder so.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 18:27
von Nobuddy
Danke deets, jetzt bin ich einen Schritt weiter.
Code: Alles auswählen
# Schreiben in eine temporäre Datei (tmp)
def write_tmp(datenpool):
tmp = tempfile.NamedTemporaryFile()
tmp.write(datenpool)
tmp.seek(0)
string = tmp.read()
tmpname = tmp.name
print(tmpname)
Ausgabe:
/tmp/tmpo4zs34
Dann muß ich das nur noch mit der Ausgabeumleitung hinbekommen.
Mal schauen, ob ich das hinbekomme.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 18:53
von BlackJack
@Nobuddy: Dir ist schon klar das die Datein nach der Ausführung der Funktion nicht mehr da ist, oder zumindest nicht mehr garantiert da sein muss!?
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 19:22
von Nobuddy
BlackJack hat geschrieben:@Nobuddy: Dir ist schon klar das die Datein nach der Ausführung der Funktion nicht mehr da ist, oder zumindest nicht mehr garantiert da sein muss!?
Hmm, dann macht tempfile ja nur Sinn, wenn man dies innerhalb der Funktion nutzt.
Dann weiß ich jetzt aber, wie ich tempfile verwenden kann.
Danke, für den kleinen Schubs!

Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Mittwoch 14. März 2012, 20:19
von cofi
Nobuddy hat geschrieben:BlackJack hat geschrieben:@Nobuddy: Dir ist schon klar das die Datein nach der Ausführung der Funktion nicht mehr da ist, oder zumindest nicht mehr garantiert da sein muss!?
Hmm, dann macht tempfile ja nur Sinn, wenn man dies innerhalb der Funktion nutzt.
Das Problem ist nicht tempfile, sondern, dass du meinen Beitrag von oben ignorierst.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Donnerstag 15. März 2012, 08:57
von Nobuddy
Hallo cofi,
sorry wenn ich nicht geantwortet habe, so habe ich mir wohl den Link von Dir angeschaut.
Laut Translater:
Diese Funktion funktioniert genau, wie TemporaryFile (), außer dass tut
die Datei wird versichert, um einen sichtbaren Namen im Dateisystem zu haben (darauf
Unix, der Verzeichniszugang wird nicht losgekettet). Dieser Name kann wiederbekommen werden
vom Namenattribut des Dateigegenstands. Ob der Name sein kann
verwendet, um die Datei ein zweites Mal zu öffnen, während die genannte vorläufige Datei ist
noch offen, ändert sich über Plattformen (es kann auf Unix so verwendet werden; es kann nicht
auf Windows NT oder später). Wenn löschen, ist wahr (der Verzug), die Datei ist
gelöscht, sobald es geschlossen wird.
Der zurückgegebene Gegenstand ist immer ein Dateimäßiggegenstand dessen Datei
Attribut ist der zu Grunde liegende wahre Dateigegenstand. Dieser Dateimäßiggegenstand kann
werden Sie in mit der Behauptung gerade wie eine normale Datei verwendet.
Verstehe ich das richtig, daß bei 'delete=True' nach beenden der Funktion, die temporäre Datei geschlossen wird, während bei 'delete=False', die temporäre Datei auch nach dem Beenden der Funktion weiter existiert?
Ich habe mal die versucht:
Code: Alles auswählen
# Schreiben in eine temporäre Datei (tmp)
daten = []
def write_tmp(datenpool):
tmp = tempfile.NamedTemporaryFile(delete=False)
tmp.write(datenpool)
tmp.seek(0)
string = tmp.read()
tmpname = tmp.name
daten.append(tmpname)
print(tmpname)
Jetzt kann ich zwar von einem anderen Script aus auf die temporäre Datei zugreifen, wie z.B.
Code: Alles auswählen
with codecs.open(daten[0], "r") as infile:
reader = csv.reader(infile, delimiter="\t", quotechar="^")
for item in reader:
print(item)
und bekomme den Inhalt der Datei.
Bei 'delete=True' wird die Datei gleich beim Beendigen der Funktion gelöscht, wie ich es oben vermutet habe.
Ist mein Resume so richtig?
Danke cofi, für Deine Hartnäckigkeit!

Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Donnerstag 15. März 2012, 11:35
von cofi
Nobuddy hat geschrieben:Bei 'delete=True' wird die Datei gleich beim Beendigen der Funktion gelöscht, wie ich es oben vermutet habe.
Ist mein Resume so richtig?
Bis auf die Kleinigkeit, dass das Loeschen beim Schliessen der TemporaryFiles ins Spiel kommt. Bei CPython ist das identisch, bei PyPy aber afaik nicht, hier wuerde deine Datei auch sonst nie geloescht. Du solltest auch TemporaryFiles in ein `with` packen.
Nobuddy hat geschrieben:Danke cofi, für Deine Hartnäckigkeit!

Gern geschehen.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Donnerstag 15. März 2012, 11:42
von webspider
Protip: Online-Übersetzer funktionieren am besten mit einzelnen Worten.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Donnerstag 15. März 2012, 12:37
von snafu
Ich würde das Übersetzen auch eher mit einzelnen Worten statt mit kompletten Absätzen machen. Vorher hatte ich dafür
LEO benutzt, inzwischen nehme ich lieber
dict.cc, weil ich den Eindruck habe, die Treffer/passenden Übersetzungen sind dort insgesamt besser.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Donnerstag 15. März 2012, 16:57
von Nobuddy
cofi hat geschrieben:Du solltest auch TemporaryFiles in ein `with` packen.
Bin mir nicht ganz im Klaren wie, hast Du mir evtl. ein kurzes Beispiel?