tempfile - Anwendungsmöglichkeiten

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.
Nobuddy
User
Beiträge: 833
Registriert: Montag 30. Januar 2012, 16:38

Dienstag 13. März 2012, 16:04

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
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Dienstag 13. März 2012, 17:44

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.
Nobuddy
User
Beiträge: 833
Registriert: Montag 30. Januar 2012, 16:38

Mittwoch 14. März 2012, 09:09

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.
Benutzeravatar
snafu
User
Beiträge: 5934
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mittwoch 14. März 2012, 09:51

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). :)
Nobuddy
User
Beiträge: 833
Registriert: Montag 30. Januar 2012, 16:38

Mittwoch 14. März 2012, 11:23

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?
Benutzeravatar
snafu
User
Beiträge: 5934
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mittwoch 14. März 2012, 11:27

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... ;)
BlackJack

Mittwoch 14. März 2012, 11:48

@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?
Nobuddy
User
Beiträge: 833
Registriert: Montag 30. Januar 2012, 16:38

Mittwoch 14. März 2012, 13:39

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.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Mittwoch 14. März 2012, 14:40

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
Nobuddy
User
Beiträge: 833
Registriert: Montag 30. Januar 2012, 16:38

Mittwoch 14. März 2012, 16:36

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.
deets

Mittwoch 14. März 2012, 16:40

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.
Nobuddy
User
Beiträge: 833
Registriert: Montag 30. Januar 2012, 16:38

Mittwoch 14. März 2012, 18:27

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.
BlackJack

Mittwoch 14. März 2012, 18:53

@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!?
Nobuddy
User
Beiträge: 833
Registriert: Montag 30. Januar 2012, 16:38

Mittwoch 14. März 2012, 19:22

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:
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Mittwoch 14. März 2012, 20:19

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.
Antworten