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

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.
Antworten
johnbecker
User
Beiträge: 3
Registriert: Montag 13. Dezember 2004, 02:35
Wohnort: 127.0.0.1
Kontaktdaten:

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)
der unterschied zwischen einem geistig verwirrtem und einem normalen:
der normale weiss, dass er verwirrt ist und versucht sich zu mäßigen.
--
[url=http://www.xfce.org/]get xfce[/url]
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Zuletzt geändert von Dookie am Mittwoch 29. Dezember 2004, 17:15, insgesamt 1-mal geändert.
[code]#!/usr/bin/env python
import this[/code]
johnbecker
User
Beiträge: 3
Registriert: Montag 13. Dezember 2004, 02:35
Wohnort: 127.0.0.1
Kontaktdaten:

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!
der unterschied zwischen einem geistig verwirrtem und einem normalen:
der normale weiss, dass er verwirrt ist und versucht sich zu mäßigen.
--
[url=http://www.xfce.org/]get xfce[/url]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

uups, stimmt, habs ausgebessert.


Dookie
[code]#!/usr/bin/env python
import this[/code]
Antworten