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

Code: Alles auswählen

tmp = tempfile.TemporaryFile(tempfilename) 
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! :wink:

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.