Seite 1 von 1

int in einen String umwandeln?

Verfasst: Donnerstag 8. März 2007, 17:14
von sprudel
Hi.
Ich bin noch ein ziemlicher Python Anfänger und hatte letztens ein Problem etwas in eine Datei zu schreiben. Es gab mir eine Fehlermeldung dass ich kein int in Dateien schreiben kann. Jetzt frage ich mich: geht das irgendwie, oder kann ich vielleicht einfach das Int in einen String umwandeln?
Ich hab ehrlich gesagt keine Ahnung was ich machen soll.
Ich hoffe ihr könnt mir helfen.

Gruß sprudel

Verfasst: Donnerstag 8. März 2007, 17:18
von Mad-Marty
Richtig, wandel es zu einem string
str(10) #-> '10'

Verfasst: Donnerstag 8. März 2007, 17:19
von Masaru
Hi sprudel

Code: Alles auswählen

int_wert=4
string_wert = str(int_wert)
Mit der "str" Methode wandelst Du Integer-Werte ganz leich in String-Objekte um.

Gruß,
>>Masaru<<

Verfasst: Donnerstag 8. März 2007, 17:19
von sprudel
Oh vielen Dank. Das stand blöderweise nirgendwo in meinem Tutorial drin. Und dabei ist es eigentlich so einfach ;-) Danke

Verfasst: Donnerstag 8. März 2007, 17:30
von jens
Noch was:

Code: Alles auswählen

>>> print "jup" + 10 + "jep"
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
>>> print "jup" + str(10) + "jep"
jup10jep
>>> print "jup%sjep" % 10
jup10jep
Letzteres ist zu bevorzugen ;)

Verfasst: Freitag 9. März 2007, 10:33
von Dill
oder so:

Code: Alles auswählen

>>> from string import Template
>>> t=Template("Eine Zahl: $zahl. l${leet}t.")
>>> map={"zahl":4711, "leet":33}
>>> t.substitute(map)
'Eine Zahl: 4711. l33t.'

Verfasst: Freitag 9. März 2007, 10:43
von jens
Wobei ich nicht genau weiß, was dieses Template so alles kann... Denn dein Beispiel geht auch einfacher so:

Code: Alles auswählen

t= "Eine Zahl: %(zahl)s. l%(leet)st."
print t % {"zahl":4711, "leet":33}

Verfasst: Freitag 9. März 2007, 10:59
von Dill
es geht auch:

Code: Alles auswählen

map = {"zahl":4711, "leet":33}
t= "Eine Zahl: %(zahl)s. l%(leet)st."
print t % map
T = t % map
ist geschmackssache. ich benutze lieber template, das sieht überichtlicher aus. der hauptunterschied ist, dass man eine methode (substitute) statt einem operator (%) verwendet.

es gibt wohl noch ein paar spezialfeatures von template, die ich aber noch nie benutzt habe, auch nicht wirklich durchgelesen:

http://www.python.org/doc/2.4.2/lib/node109.html

Verfasst: Freitag 9. März 2007, 11:02
von jens
Ich glaube der einzige Vorteil ist, das man bessere Fehlermeldungen bekommt und das es safe_substitute gibt. Ich frage mich nur, warum man unbedingt eine neue Syntax eingeführt hat (also warum statt %(leet)s -> ${leet})

Verfasst: Freitag 9. März 2007, 11:09
von Dill
Ja, bessere fehlermeldungen sind auch noch von vorteil, kann mich aber nicht erinnern, dass ich beim substituieren mal problematische fehler hatte ...


neue syntax wohl daher:

Code: Alles auswählen

template.substitute({"test":1}) % {"test":2}

Verfasst: Freitag 9. März 2007, 11:28
von BlackJack
Die neue Syntax wird vielen Umsteigern von anderen Sprachen bekannter vorkommen und ist weniger fehleranfällig, weil viele Leute gerne mal das Format bei '%(name)s' vergessen. Ist mir auch schon passiert.

Insbesondere wenn man Templates in Dateien verwendet, die von Benutzern bearbeitet werden, ist '$name' bzw. '${name}' leichter für Leute die kein Python können und sich immer fragen was der Quatsch mit dem 's' nach der Klammer soll.