Ich nehme ein paar Freiheiten, da Python 2 die Zeile als Strings und Bytes durcheinander bringt. Es gibt 256 Bytes im Bereich von 0 bis 255. Sie können ihre Byte-Repräsentation mit chr()
abrufen. Also, alle Bytes von 0 bis 255 so aussehen
>>> ''.join(map(chr, range(256)))
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\
x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./:;
<=>[email protected][\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80
\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93
\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6
\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9
\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc
\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf
\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2
\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
string.maketrans(from, to)
erstellt eine Reihe von 256 Zeichen, wobei die Zeichen in from
durch to
ersetzt werden. Zum Beispiel string.maketrans('ab01', 'AB89')
wird die Zeichenfolge von oben zurück, aber a
wird durch A
, b
von B
, 0
von 8
und 1
durch 9
ersetzt werden.
>>> string.maketrans('ab01', 'AB89')
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\
x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./8923456789:;
<=>[email protected][\\]^_`ABcdefghijklmnopqrstuvwxyz{|}~\x7f\x80
\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93
\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6
\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9
\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc
\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf
\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2
\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
Effektiv, string.maketrans('', '') == ''.join(map(chr, range(256)))
.
Dies dient als eine Karte, die, wenn str.translate()
zur Verfügung gestellt wird, verwendet werden kann, um mehrere Zeichen mit einem Durchlauf über Ihre Zeichenfolge zu ersetzen. Für die obige Beispielkarte bleiben alle Zeichen gleich, mit Ausnahme von allen a
, die in A
, b
in B
usw. umgewandelt werden. Wenn Sie myStr.translate(string.maketrans('', ''))
tun, ändern Sie einfach nichts in myStr
.
Schließlich hat translate()
ein zusätzliches Argument, deletechars
. Wenn Sie eine Zeichenfolge für dieses Argument übergeben, übersetzt translate()
alle Zeichen gemäß der von Ihnen bereitgestellten Zuordnung, ignoriert jedoch alle Zeichen in deletechars
. Wenn Sie also alles zusammensetzen, ändert myStr.translate(string.maketrans('', ''), string.punctuation)
kein Zeichen in der Zeichenfolge, ignoriert dabei jedoch alle Zeichen in string.punctuation
. Effektiv haben Sie die Interpunktion in der Ausgabezeichenfolge entfernt.
Haben Sie die [docs] (https://docs.python.org/2/library/string.html#string.maketrans) gelesen? – MattDMo
ja, aber wie hilft uns das große Durcheinander von maketrans dabei, Interpunktion zu vermeiden? – lars
@lars: Es stellt eine Tabelle bereit, um die 'translate()' Methode zu füttern, die nichts unternimmt (so können Sie das zweite Argument der Methode übergeben und es nur Zeichen entfernen lassen). – martineau