如何用python中的空格替换所有这些特殊字符?
我有一个公司名单。 。 。
例如: - [myfiles.txt]
我的公司.C
Old Wine pvt
master-minds ltd
“apex-labs ltd”
“India-New corp”
Indo-American pvt / ltd
这里,按照上面的例子。 。 。我需要文件myfiles.txt
中的所有特殊字符[ - ,“,/,。]必须替换为单个空格并保存到另一个文本文件myfiles1.txt
。
有人可以帮帮我吗?
答案 0 :(得分:10)
假设您要更改所有非字母数字的内容,可以在命令行中执行此操作:
cat foo.txt | sed "s/[^A-Za-z0-99]/ /g" > bar.txt
或者在re
模块的Python中:
import re
original_string = open('foo.txt').read()
new_string = re.sub('[^a-zA-Z0-9\n\.]', ' ', original_string)
open('bar.txt', 'w').write(new_string)
答案 1 :(得分:3)
import string
specials = '-"/.' #etc
trans = string.maketrans(specials, ' '*len(specials))
#for line in file
cleanline = line.translate(trans)
e.g。
>>> line = "Indo-American pvt/ltd"
>>> line.translate(trans)
'Indo American pvt ltd'
答案 2 :(得分:2)
import re
strs = "how much for the maple syrup? $20.99? That's ricidulous!!!"
strs = re.sub(r'[?|$|.|!]',r'',strs) #for remove particular special char
strs = re.sub(r'[^a-zA-Z0-9 ]',r'',strs) #for remove all characters
strs=''.join(c if c not in map(str,range(0,10)) else '' for c in strs) #for remove numbers
strs = re.sub(' ',' ',strs) #for remove extra spaces
print(strs)
Ans: how much for the maple syrup Thats ricidulous
答案 3 :(得分:1)
虽然maketrans是最好的方法,但我从不重写语法。由于速度很少是一个问题,我知道正则表达式,我倾向于这样做:
>>> line = "-[myfiles.txt] MY company.INC"
>>> import re
>>> re.sub(r'[^a-zA-Z0-9]', ' ',line)
' myfiles txt MY company INC'
这具有额外的好处,即声明您接受的角色而不是您拒绝的角色,在这种情况下感觉更容易。
如果您使用非ASCII字符,则必须返回删除您拒绝的字符。如果只有标点符号,您可以这样做:
>>> import string
>>> chars = re.escape(string.punctuation)
>>> re.sub(r'['+chars+']', ' ',line)
' myfiles txt MY company INC'
但你会注意到
答案 4 :(得分:0)
起初我想提供一个string.maketrans / translate示例,但是你可能正在使用一些utf-8编码的字符串,并且ord()排序的translate-table会吹在你的脸上,所以我想到了另一个解决方案:
conversion = '-"/.'
text = f.read()
newtext = ''
for c in text:
newtext += ' ' if c in conversion else c
这不是最快捷的方式,但易于掌握和修改。
因此,如果你的文字是非ascii,你可以解码conversion
并将文本字符串解码为unicode,然后以你想要的任何编码重新编码。