use*_*217 15 python string replace list urllib
我正在使用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])
Run Code Online (Sandbox Code Playgroud)
这是错误.
Please enter a URL: http://simleyfootball.com
Traceback (most recent call last):
File "C:\Users\jeremy.KLUG\My Documents\LiClipse Workspace\Python Project 2\Module2.py", line 7, in <module>
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
TypeError: replace() takes at least 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
Kob*_*i K 47
一种方法是使用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
Run Code Online (Sandbox Code Playgroud)
输出:
hey there
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用re.escape:
import string
import re
my_str = "hey th~!ere"
chars = re.escape(string.punctuation)
print re.sub(r'['+chars+']', '',my_str)
Run Code Online (Sandbox Code Playgroud)
输出:
hey there
Run Code Online (Sandbox Code Playgroud)
关于PEP-8参数的python参数样式的一个小提示应该是remove_special_chars和不是removeSpecialChars
此外,如果你想保留的空间只是改变[^a-zA-Z0-9 \n\.]到[^a-zA-Z0-9\n\.]
小智 24
str.replace是你想要做的错误的函数(除了它被错误地使用).您希望用空格替换集合中的任何字符,而不是用单个空格替换整个集合(后者是替换的).您可以像这样使用翻译:
removeSpecialChars = z.translate ({ord(c): " " for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+"})
Run Code Online (Sandbox Code Playgroud)
这将创建一个映射,将特殊字符列表中的每个字符映射到一个空格,然后在字符串上调用translate(),用空格替换特殊字符集中的每个字符.
小智 8
您需要调用replaceonz而不是 on str,因为您想要替换位于字符串变量中的字符z
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
Run Code Online (Sandbox Code Playgroud)
但这是行不通的,因为替换会查找子字符串,您很可能需要将正则表达式模块re与该sub函数一起使用:
import re
removeSpecialChars = re.sub("[!@#$%^&*()[]{};:,./<>?\|`~-=_+]", " ", z)
Run Code Online (Sandbox Code Playgroud)
不要忘记[],它表示这是一组要替换的字符。