замена специальных символов в строке python
Я использую urllib для получения строки html с веб-сайта и должен поместить каждое слово в html-документе в список.
вот код у меня есть до сих пор. Я продолжаю получать ошибку. Я также скопировал ошибку ниже.
import urllib.request
url = input("Please enter a URL: ")
z=urllib.request.urlopen(url)
z=str(z.read())
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?|`~-=_+", " ")
words = removeSpecialChars.split()
print ("Words list: ", words[0:20])
здесь ошибка.
Please enter a URL: http://simleyfootball.com
Traceback (most recent call last):
File "C:Usersjeremy.KLUGMy DocumentsLiClipse WorkspacePython Project 2Module2.py", line 7, in <module>
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?|`~-=_+", " ")
TypeError: replace() takes at least 2 arguments (1 given)
5 ответов
.replace-неправильная функция для того, что вы хотите сделать (кроме того, что она используется неправильно). Вы хотите заменить любой символ набора пробелом, а не весь набор одним пробелом (последний-это то, что делает replace). Вы можете использовать translate следующим образом:
removeSpecialChars = z.translate ({ord(c): " " for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+"})
это создает отображение, которое сопоставляет каждый символ в вашем списке специальных символов пробелу, а затем вызывает translate () в строке, заменяя каждый символ в наборе специальных символов с пробелом.
один из способов-это использовать re.sub, это мой предпочтительный способ.
import re
my_str = "hey th~!ere"
my_new_string = re.sub('[^a-zA-Z0-9 \n\.]', '', my_str)
print my_new_string
выход:
hey there
другой способ-использовать re.побег:
import string
import re
my_str = "hey th~!ere"
chars = re.escape(string.punctuation)
print re.sub(r'['+chars+']', '',my_str)
выход:
hey there
только небольшой совет о стиле параметров в python by PEP-8 параметры должны быть remove_special_chars
, а не removeSpecialChars
если вы хотите keep пробелы просто меняются [^a-zA-Z0-9 \n\.]
to [^a-zA-Z0-9\n\.]
нужно позвонить replace
on z
, а не str
, так как вы хотите заменить символы, расположенные в строковой переменной z
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
но это не сработает, так как replace ищет подстроку, вам, скорее всего, придется использовать модуль регулярного выражения re
С sub
функция:
import re
removeSpecialChars = re.sub("[!@#$%^&*()[]{};:,./<>?\|`~-=_+]", " ", z)
не забудьте []
, что указывает на то, что это набор символов для замены.
replace работает с определенной строкой, поэтому вам нужно назвать ее так
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
но это наверное не то, что вам нужно, так как это будет выглядеть на одну строку, содержащую все символы в том же порядке. вы можете сделать это с помощью регулярного выражения, как указал Дэнни Мишо.
в качестве примечания, вы можете искать BeautifulSoup, которая является библиотекой для разбора грязного HTML-форматированного текста, как то, что вы обычно получаете от scaping сайты.
вы можете заменить специальные символы на нужные символы следующим образом,
import string
specialCharacterText = "H#y #@w @re &*)?"
inCharSet = "!@#$%^&*()[]{};:,./<>?\|`~-=_+\""
outCharSet = " " #corresponding characters in inCharSet to be replaced
splCharReplaceList = string.maketrans(inCharSet, outCharSet)
splCharFreeString = specialCharacterText.translate(splCharReplaceList)