I want to remove all punctuation marks from a text file using .translate() method. It seems to work well under Python 2.x but under Python 3.4 it doesn\'t seem to do anythin
Late answer, but to remove all punctuation on python >= 3.6, you can also use:
import re, string
clean_string = re.sub(rf"[{string.punctuation}]", "", dirty_string)
Demo
The call signature of str.translate has changed and apparently the parameter deletechars has been removed. You could use
import re
fline = re.sub('['+string.punctuation+']', '', fline)
instead, or create a table as shown in the other answer.
You have to create a translation table using maketrans
that you pass to the str.translate
method.
In Python 3.1 and newer, maketrans
is now a static-method on the str type, so you can use it to create a translation of each punctuation you want to None
.
import string
# Thanks to Martijn Pieters for this improved version
# This uses the 3-argument version of str.maketrans
# with arguments (x, y, z) where 'x' and 'y'
# must be equal-length strings and characters in 'x'
# are replaced by characters in 'y'. 'z'
# is a string (string.punctuation here)
# where each character in the string is mapped
# to None
translator = str.maketrans('', '', string.punctuation)
# This is an alternative that creates a dictionary mapping
# of every character from string.punctuation to None (this will
# also work)
#translator = str.maketrans(dict.fromkeys(string.punctuation))
s = 'string with "punctuation" inside of it! Does this work? I hope so.'
# pass the translator to the string's translate method.
print(s.translate(translator))
This should output:
string with punctuation inside of it Does this work I hope so
I just compared the three methods by speed. translate
is slower than re.sub
(with precomilation) in about 10 times. And str.replace
is faster than re.sub
in about 3 times. By str.replace
I mean:
for ch in string.punctuation:
s = s.replace(ch, "'")
In python3.x ,it can be done using :
import string
#make translator object
translator=str.maketrans('','',string.punctuation)
string_name=string_name.translate(translator)