Seite 1 von 1

/home/<user>, statt /home/<user>/<verz.>

Verfasst: Dienstag 28. Dezember 2004, 00:33
von johnbecker
hi, wollte in den ferien mal en bisschen python testen und hab folgenden quelltext abgeschrieben ( ;) ):

Code: Alles auswählen

#!/usr/bin/env python

list={"bla":"121211","blubb":544234}
fw=open("foo.txt","w")
for a in range(len(list)):
 fw.write(list.keys()[a]+"\t"+str(list.values()[a])+"\n")
führe das script in /home/<user>/py aus, foo.txt landet jedoch in /home/<user>

dann mal noch gerade ne frage zu dem script:

wie ist denn [a] zu verstehen?
kann ja schon mehr oder weniger php, aber sowas hab ich irgendwie noch nie gesehen *g (wird auch in dem buch, das ich lese überhaupt nicht darauf eingegangen)

Verfasst: Dienstag 28. Dezember 2004, 01:39
von Dookie
Hi johnbecker,

in dem Code ist ja einiges daneben, Bist Du sicher daß das ein Pythonbuch ist? ;)

list ist hier ein Dictionary, wobei es schon mal fahrlässig ist eine Variable nach einem Builtin zu benennen wird dann auch noch statt über die Struktur mittels Hilfskonstruktion und umständlich mit list.keys()[a] und list.values[a] was unnötige Methodenaufrufe verursacht auf die Daten zugegriffen. Der Autor jammert dann sicher über die schlechte Performance von Python.

hier mal eine sauberere Lösung mit a

Code: Alles auswählen

data={"bla":"121211","blubb":544234}
fw=open("foo.txt","w")
keys = data.keys()
values = data.values()
for a in xrange(len(data)):
    #print a, keys[a], values[a] # uncomment for verbose output
    fw.write(keys[a]+"\t"+str(values[a])+"\n")
fw.close()
Du kannst in der die Zeile die mit #print anfängt das erste # löschen, dann wird dir angezeigt in der Console, welche Werte a keys[a] und values[a] annehmen.

Um Daten ins selbe Verzeichnis wie das Pythonscript zu kannst du folgendes verwenden:

Code: Alles auswählen

fname = os.path.join(os.path.dirname(__file__), "foo.txt")
Und hier wie man das eigentlich in Python macht.

Code: Alles auswählen

#!/usr/bin/env python

import os

#Datei in selbes Verzeichnis wie das Script
fname = os.path.join(os.path.dirname(__file__), "foo.txt")

daten = {"bla":"121211","blubb":544234} # besser daten statt list!
fw = open(fname, "w")
for key, value in daten.iteritems():
    fw.write(key+"\t"+str(value)+"\n")
fw.close() # Datei brav wieder schließen
Gruß

Dookie

Verfasst: Dienstag 28. Dezember 2004, 11:16
von johnbecker
Dookie hat geschrieben:in dem Code ist ja einiges daneben, Bist Du sicher daß das ein Pythonbuch ist? ;)
ja, wobei das mit list wohl auf meinen mist gewachsen ist! sonst ist es aber so auch im buch und, ja, der autor meckert auch über die performance *g

das buch heisst einsteigerseminar (zum glück nur ausgeliehen)
bald kommt jedoch die python-bible ins haus.. hoffe mal, dass es da ein bisschen ordentlicher drin ist..

danke!

Verfasst: Mittwoch 29. Dezember 2004, 16:22
von Milan
Hi. Nur nochmal dazwischen, das ist auch net fehlerfrei :wink: es müsste so heißen:

Code: Alles auswählen

for key, value in daten.items():
#oder noch besser
for key, value in daten.iteritems():
Ansonsten bekommste einen Fehler, weil kein value belegt werden kann...

mfG Milan

Verfasst: Mittwoch 29. Dezember 2004, 17:16
von Dookie
uups, stimmt, habs ausgebessert.


Dookie