在python 3.6中使用replace方法

时间:2017-06-22 14:29:48

标签: python replace python-3.6

我需要用空格替换“!@#$%^&*()\n{}[]()_-+=<>?\xa0;'/.,”。我正在使用替换方法,但它似乎在python 3.6上已弃用。 word_list = []是一个列表,其中包含从网页中提取的所有字词。然后clean_up_list方法将清除符号并用空格替换它们。 我使用for遍历符号的长度并用空格替换符号。我用了 word = word.replace(symbols[i],"");有关如何使用替换方法的任何帮助,以便替换符号并打印单词之间没有符号的单词。

错误:

AttributeError: 'list' object has no attribute 'replace'

我的代码:

url = urllib.request.urlopen("https://www.servicenow.com/solutions-by-category.html").read()
word_list = []
soup = bs.BeautifulSoup(url,'lxml')
word_list.append([element.get_text() for element in soup.select('a')])
print(word_list)

def clean_up_list(word_list):
    clean_word_list = []
    for word in word_list:
        symbols = "!@#$%^&*()\n{}[]()_-+=<>?\xa0;'/.,"
        for i in range(0,len(symbols)):

            word  = word.replace(symbols[i],"")
            #print(type(word))

                #print(type(word))
                #word.replace(symbols[i]," ")
        if(len(word) > 0):
            #print(word)
            clean_word_list.append(word)

2 个答案:

答案 0 :(得分:1)

这里有两个错误:首先你构造一个字符串列表,但是一个字符串列表列表。这一行:

word_list.append([element.get_text() for element in soup.select('a')])

应该是:

word_list.extend([element.get_text() for element in soup.select('a')])

此外,您无法直接在列表中调用replace (它不是list对象的方法)。每个条目都需要这个。

接下来,您还指定(正确),然后必须为replace(..)字符串中的每个字符调用symbols。这当然效率低下。但是,您可以使用translate(..)

所以你可以用列表理解 替换整个for循环:

symbols = "!@#$%^&*()\n{}[]()_-+=<>?\xa0;'/.,"
clean_word_list = [word.translate(None,symbols) for word in word_list]

答案 1 :(得分:0)

尝试明确地将单词转换为字符串,因为您接收的错误代码提到对象是一个&#39;列表&#39;不是字符串,并且无法在列表上调用replace方法。例如(注意倒数第二行):

def clean_up_list(word_list):
clean_word_list = []
for word in word_list:
    word = str(word)
    symbols = "!@#$%^&*()\n{}[]()_-+=<>?\xa0;'/.,"