2012-03-28 9 views
4

Ich schreibe ein Python-Skript bei der Arbeit, die ein Teil mit einer großen mehrzeiligen Zeichenfolge enthält, die auch Variablen erweitern muss. Ich benutze es, die folgende Art und Weise in Python 2.6 oder Python 3 zu tun:Python: Format Multithread-Zeichenfolgen mit Variablen

message = """ 
      Hello, {foo} 
      Sincerely, {bar} 
      """ 
print (message.format(foo = "John", bar = "Doe")) 

jedoch der Server bei der Arbeit ist eine alte Version von Python (2.3.4) ausgeführt wird, die nicht Zeichenfolge nicht unterstützt. Format. Was ist eine Möglichkeit, dies in alten Python-Versionen zu tun? Können Sie das mit dem% Operator tun? Ich versuchte dies, aber es hat nicht zu funktionieren scheint:

message = """ 
      Hello, %(foo) 
      Sincerely, %(bar) 
      """ % {'foo': 'John', 'bar': "Doe"} 

Ich konnte einfach tun es ohne mehrzeilige Strings, aber die Nachrichten, die ich zu Format brauchen, sind ganz mit vielen Variablen groß. Gibt es eine einfache Möglichkeit, das in Python 2.3.4 zu tun? (Noch ein Python Anfänger, so leid, wenn dies eine dumme Frage ist.)

Antwort

13

Sie wollen

message = """ 
      Hello, %(foo)s 
      Sincerely, %(bar)s 
      """ % {'foo': 'John', 'bar': "Doe"} 

Hinweis sagen, dass die s am Ende, die das allgemeine Format "%(keyname)s" % {"keyname": "value"}

+1

Gotcha, dank dir und Matt. Das ist es, was ich vermisste, funktioniert jetzt großartig. – Nate

+0

Wie wäre es mit der Verkettung von Variablen? –

+0

@AllDani: Ich bin mir nicht sicher, was Sie fragen. Wenn Ihre Frage lautet: "Wie formatiere ich eine Zeichenkette, die zwei direkt interpolierte Variablen enthält, dann lautet die Antwort:" Hallo% (foo) s% (bar) s '% {' foo ' : 'x', 'bar': 'y'} ''. (Oder Sie können den neuen Ansatz '' str.format'' verwenden, der für das OP keine Option war, da es sich um eine ältere Version von Python handelt .) –

0

Sie haben einen Tippfehler:

message = """ 
      Hello, %(foo) 
      Sincerely, %(bar) 
      """ % {'foo': 'John", 'bar': "Doe"} 
         ^

Ersetzen Sie das Apostroph mit einem doppelten Anführungszeichen und es sollte gut laufen.

+0

Außerdem fehlt der Formatierungstypspezifizierer. – MattH

+0

Whoops, danke. Ich tippte es direkt auf den Computer, machte meinen Beitrag falsch. Lass mich das bearbeiten. – Nate

3

Versuchen Sie, diese

message = """ 
      Hello, %(foo)s 
      Sincerely, %(bar)s 
      """ % {'foo': "John", 'bar': "Doe"} 
2

Wörterbuch basiert String Formating

message = """ 
      Hello, %(foo)s 
      Sincerely, %(bar)s 
      """ % { "foo":"john","bar":"doe"} 
macht