Seite 2 von 2
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Donnerstag 15. März 2012, 17:07
von cofi
Genauso wie alles andere auch:
Code: Alles auswählen
# Schreiben in eine temporäre Datei (tmp)
daten = []
def write_tmp(datenpool):
with tempfile.NamedTemporaryFile(delete=False) as tmp:
tmp.write(datenpool)
tmp.seek(0)
string = tmp.read()
tmpname = tmp.name
daten.append(tmpname)
print(tmpname)
Das globale Daten ist auch unschoen, besser waere es, wenn du einfach den Namen zurueckgibst und die Verwaltung vom aufrufenden Code machen laesst:
Code: Alles auswählen
# Schreiben in eine temporäre Datei (tmp)
daten = []
def write_tmp(datenpool):
with tempfile.NamedTemporaryFile(delete=False) as tmp:
tmp.write(datenpool)
tmp.seek(0)
string = tmp.read()
return tmp.name
daten.append(write_tmp(dein_datenpool))
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Donnerstag 15. März 2012, 18:34
von Nobuddy
Danke cofi für Deine Hilfe,
ich werde dies so umsetzen und die zweite Variante nehmen, die Lösung ist eleganter, wie Du schon geschrieben hast!

Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Freitag 16. März 2012, 13:56
von Nobuddy
Ich versuche gerade eine Möglichkeit zu finden, in die temporäre Datei weitere Daten anzufügen.
Irgendwie funktioniert das aber nicht so, wie gewünscht.
Ich habe dazu ein kleines Beispiel erstellt:
Code: Alles auswählen
num1 = 'Hallo,'
num2 = 'ich heiße Wolfgang!'
# Schreiben in eine temporäre Datei (tmp)
tempname = []
def write_tmp(datenpool):
with tempfile.NamedTemporaryFile(delete=False) as tmp:
tmp.write(datenpool)
tmp.seek(0)
string = tmp.read()
return tmp.name
tempname.append(write_tmp(num1 + ' ' + num2))
print(tempname[0])
daten = []
# Anfügen in eine temporäre Datei (tmp) <<>> fehlerhaft
def writeappend_tmp(filename, datenpool):
with codecs.open(filename, "a") as tmp:
writer = csv.writer(tmp, delimiter="\t", quotechar="^")
writer.writerows(datenpool)
t = (num1 + ' ' + num2)
writeappend_tmp(tempname[0], t)
with codecs.open(tempname[0], "r") as infile:
reader = csv.reader(infile, delimiter="\t", quotechar="^")
for item in reader:
print(item)
Als Ausgabe erhalte ich dann:
/tmp/tmp6s30Tt
['Hallo, ich hei\xc3\x9fe Wolfgang!H']
['a']
['l']
['l']
['o']
[', ']
[' ']
['i']
['c']
['h']
[' ']
['h']
['e']
['i']
['\sxc3']
['\x9f']
['e']
[' ']
['W']
['o']
['l']
['f']
['g']
['a']
['n']
['g']
['!']
Hat da jemand von Euch vielleicht eine Idee, warum beim anfügen von Daten in die temporäre Datei, so eine Ausgabe kommt?
Normal sollte so etwas kommen:
/tmp/tmp6s30Tt
['Hallo, ich hei\xc3\x9fe Wolfgang!']
['Hallo, ich hei\xc3\x9fe Wolfgang!']
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Freitag 16. März 2012, 14:04
von Hyperion
Also Dein Code ist im ganzen ziemlich "verworren" und unschön.
Dein Problem liegt an dem ``writerow
s``! Lass mal das ``s`` weg

Du hast ja keine Sequenz von Strings, sondern nur einen String! Dieser wird von ``writerows`` als Sequenz aufgefasst und entsprechend geht er das Ding Zeichen für Zeichen durch.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Freitag 16. März 2012, 14:06
von EyDu
Übersehe ich etwas, oder ist das
einfach nur überflüssig?
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Freitag 16. März 2012, 14:57
von Nobuddy
Hyperion, habe dies jetzt mal so abgeändert:
Code: Alles auswählen
daten = []
# Anfügen in eine temporäre Datei (tmp) <<>> fehlerhaft
def writeappend_tmp(filename, datenpool):
with codecs.open(filename, "a") as tmp:
tmp.write(datenpool)
writrow bringt zwar gegenüber writerows alles in eine Zeile, aber jedes Zeichen wird seperat mit '' eingeschlossen.
Mit 'tmp.write(datenpool)' hingegen, wird alles fehlerfrei angezeigt.
Das Einzigste ist, wie in meinem Beispiel hier, am Ende einen Zeilenumbruch zu erzeugen.
Sonst wird alles hintereinander angefügt.
Hallo Eydu, habe mal
weggelassen.
Für mich ist kein Unterschied feststellbar, anscheinend wie Du sagst überflüssig.
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Freitag 16. März 2012, 17:41
von Nobuddy
Den Zeilenumbruch, habe ich jetzt gleich in der Funktion mit eingebaut.
Code: Alles auswählen
# Schreiben in eine temporäre Datei (tmp)
tempname = []
def write_tmp(datenpool):
with tempfile.NamedTemporaryFile(delete=False) as tmp:
tmp.write(datenpool + '\n')
return tmp.name
daten = []
# Anfügen in eine temporäre Datei (tmp)
def writeappend_tmp(filename, datenpool):
with codecs.open(filename, "a") as tmp:
tmp.write(datenpool + '\n')
Was mich noch interessiert ist, ob man tempfile auch in Verbindung mit dem csv-Modul nutzen kann?
Re: tempfile - Anwendungsmöglichkeiten
Verfasst: Freitag 16. März 2012, 18:34
von EyDu
Nobuddy hat geschrieben:Was mich noch interessiert ist, ob man tempfile auch in Verbindung mit dem csv-Modul nutzen kann?
Natürlich. So etwas kannst du aber auch einfach selber ausprobieren
