如何用python中的空格替换所有那些特殊字符?

时间:2012-01-10 09:13:36

标签: python replace special-characters whitespace text-files

如何用python中的空格替换所有这些特殊字符?

我有一个公司名单。 。 。

例如: - [myfiles.txt]

  

我的公司.C

     

Old Wine pvt

     

master-minds ltd

     

“apex-labs ltd”

     

“India-New corp”

     

Indo-American pvt / ltd

这里,按照上面的例子。 。 。我需要文件myfiles.txt中的所有特殊字符[ - ,“,/,。]必须替换为单个空格并保存到另一个文本文件myfiles1.txt

有人可以帮帮我吗?

5 个答案:

答案 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,然后以你想要的任何编码重新编码。