Как заменить все эти специальные символы пробелами в python? - PullRequest
2 голосов
/ 10 января 2012

Как заменить все эти специальные символы пробелами в python?

У меня есть список названий компаний.,,

Пример: - [myfiles.txt]

МОЯ компания.INC

Old Wine pvt

master-minds ltd

"apex-labs ltd"

"India-New corp"

Indo-American pvt / ltd

Здесь, согласно приведенному выше примеру.,,Мне нужны все специальные символы [-, ", / ,.] в файле myfiles.txt, должны быть заменены одним пробелом и сохранены в другом текстовом файле myfiles1.txt.

Может кто-нибудь, пожалуйста, помогите мнеиз

Ответы [ 5 ]

10 голосов
/ 10 января 2012

Предполагая, что вы хотите изменить все не алфавитно-цифровое значение, вы можете сделать это в командной строке:

cat foo.txt | sed "s/[^A-Za-z0-99]/ /g" > bar.txt

Или в Python с модулем re:

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)
3 голосов
/ 10 января 2012
import string

specials = '-"/.' #etc
trans = string.maketrans(specials, ' '*len(specials))
#for line in file
cleanline = line.translate(trans)

например

>>> line = "Indo-American pvt/ltd"
>>> line.translate(trans)
'Indo American pvt ltd'
2 голосов
/ 24 октября 2016
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
1 голос
/ 10 января 2012

Хотя 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'

Но вы заметите

0 голосов
/ 10 января 2012

Сначала я подумал предоставить пример string.maketrans / translate, но, возможно, вы используете несколько строк в кодировке utf-8, и отсортированная таблица ord () перевернет ваше лицо, поэтому я подумал о другом решении:

conversion = '-"/.'
text =  f.read()
newtext = ''
for c in text:
    newtext += ' ' if c in conversion else c

Это не самый быстрый способ, но его легко понять и изменить.

Так что, если ваш текст не является ascii, вы можете декодировать conversion и текстовые строки в Unicode изатем перекодировать в любой кодировке, которую вы хотите.

...