Ich möchte alle Satzzeichen mit der Methode .translate () aus einer Textdatei entfernen. Es scheint unter Python 2.x gut zu funktionieren, aber unter Python 3.4 scheint es nichts zu tun.
Mein Code lautet wie folgt und die Ausgabe entspricht der Eingabe von Text.
import string
fhand = open("Hemingway.txt")
for fline in fhand:
fline = fline.rstrip()
print(fline.translate(string.punctuation))
python
python-3.x
Cybujan
quelle
quelle
string.punctuation
dies keine Anführungszeichen enthält. Wie würden wir diesen Code optimieren, um die Tastenstring.punctuation
sowie die benutzerdefinierten Zeichen zu kürzen? Eine oder Aussage?string.punctuation
enthält Anführungszeichen (sowohl doppelte als auch einfache) - selbst in meinem Beispiel werden die doppelten Anführungszeichen entfernt. Wenn Sie anpassen möchten , was zusätzlich zu gestrippt wirdstr.punctuation
, nur verkettenstring.punctuation
mit einer Reihe von Zeichen , die Sie auch entfernt werden sollen, wietranslator = str.maketrans({key: None for key in string.punctuation + 'abc'})
wenn Sie Interpunktion und alle Vorkommen der Zeichen entfernen wolltea
,b
oderc
.str.maketrans('', '', string.punctuation)
würde auch funktionieren. Es besteht keine Notwendigkeit, eine Schleife zustr.maketrans(dict.fromkeys(string.punctuation))
erstellen , jedenfalls wäre dies hier sogar besser.Die Aufrufsignatur von str.translate hat sich geändert und anscheinend wurde der Parameter deletechars entfernt. Du könntest benutzen
import re fline = re.sub('['+string.punctuation+']', '', fline)
oder erstellen Sie stattdessen eine Tabelle wie in der anderen Antwort gezeigt.
quelle
In python3.x kann dies folgendermaßen erfolgen:
import string #make translator object translator=str.maketrans('','',string.punctuation) string_name=string_name.translate(translator)
quelle
Ich habe gerade die drei Methoden nach Geschwindigkeit verglichen.
translate
ist langsamer alsre.sub
(mit Vorkomilation) in etwa 10 mal. Undstr.replace
ist schneller alsre.sub
in etwa 3 mal. Mitstr.replace
meine ich:for ch in string.punctuation: s = s.replace(ch, "'")
quelle
Späte Antwort, aber um alle Interpunktion auf Python> = 3.6 zu entfernen, können Sie auch Folgendes verwenden:
import re, string clean_string = re.sub(rf"[{string.punctuation}]", "", dirty_string)
Demo
quelle