Benannte Ersetzungsfelder (die {...}
Teile in einer Formatzeichenfolge ) stimmen mit Schlüsselwortargumenten der .format()
Methode und nicht mit Positionsargumenten überein .
Schlüsselwortargumente sind wie Schlüssel in einem Wörterbuch. Reihenfolge spielt keine Rolle, da sie mit einem Namen abgeglichen werden .
Wenn Sie mit Positionsargumenten übereinstimmen möchten, verwenden Sie Zahlen:
"{0} {1}".format(10, 20)
In Python 2.7 und höher können Sie die Zahlen weglassen. Die {}
Ersatzfelder werden dann in der Reihenfolge ihres Auftretens in der Formatierungszeichenfolge automatisch nummeriert:
"{} {}".format(10, 20)
Die Formatierungszeichenfolge kann sowohl mit Positions- als auch mit Schlüsselwortargumenten übereinstimmen und Argumente mehrfach verwenden:
"{1} {ham} {0} {foo} {1}".format(10, 20, foo='bar', ham='spam')
Zitiert aus der Format - String - Spezifikation :
Der Feldname selbst beginnt mit einem Argumentnamen , der entweder eine Zahl oder ein Schlüsselwort ist . Wenn es sich um eine Zahl handelt, bezieht sie sich auf ein Positionsargument, und wenn es sich um ein Schlüsselwort handelt, bezieht sie sich auf ein benanntes Schlüsselwortargument.
Hervorhebung von mir.
Wenn Sie eine große Formatierungszeichenfolge erstellen, ist es häufig viel besser lesbar und wartbar, benannte Ersatzfelder zu verwenden, sodass Sie die Argumente nicht ständig zählen und herausfinden müssen, welches Argument wohin in die resultierende Zeichenfolge fließt.
Sie können auch die **keywords
aufrufende Syntax verwenden, um ein vorhandenes Wörterbuch auf ein Format anzuwenden, sodass Sie eine CSV-Datei einfach in eine formatierte Ausgabe umwandeln können:
import csv
fields = ('category', 'code', 'price', 'description', 'link', 'picture', 'plans')
table_row = '''\
<tr>
<td><img src="{picture}"></td>
<td><a href="{link}">{description}</a> ({price:.2f})</td>
</tr>
'''
with open(filename, 'rb') as infile:
reader = csv.DictReader(infile, fieldnames=fields, delimiter='\t')
for row in reader:
row['price'] = float(row['price'])
print table_row.format(**row)
Hier picture
, link
, description
und price
sind alle Schlüssel im row
Wörterbuch, und es ist viel einfacher zu sehen , was passiert , wenn ich die Anwendung row
auf die Formatierung Zeichenfolge.