re.sub错误与“预期字符串或字节类对象”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了re.sub错误与“预期字符串或字节类对象”相关的知识,希望对你有一定的参考价值。

我已阅读有关此错误的多篇帖子,但我仍然无法弄明白。当我尝试循环我的函数时:

def fix_Plan(location):
    letters_only = re.sub("[^a-zA-Z]",  # Search for all non-letters
                          " ",          # Replace all non-letters with spaces
                          location)     # Column and row to search    

    words = letters_only.lower().split()     
    stops = set(stopwords.words("english"))      
    meaningful_words = [w for w in words if not w in stops]      
    return (" ".join(meaningful_words))    

col_Plan = fix_Plan(train["Plan"][0])    
num_responses = train["Plan"].size    
clean_Plan_responses = []

for i in range(0,num_responses):
    clean_Plan_responses.append(fix_Plan(train["Plan"][i]))

这是错误:

Traceback (most recent call last):
  File "C:/Users/xxxxx/PycharmProjects/tronc/tronc2.py", line 48, in <module>
    clean_Plan_responses.append(fix_Plan(train["Plan"][i]))
  File "C:/Users/xxxxx/PycharmProjects/tronc/tronc2.py", line 22, in fix_Plan
    location)  # Column and row to search
  File "C:UsersxxxxxAppDataLocalProgramsPythonPython36lib
e.py", line 191, in sub
    return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object
答案

正如你在评论中所说,一些值似乎是浮点数,而不是字符串。在将其传递给re.sub之前,您需要将其更改为字符串。最简单的方法是在使用location时将str(location)更改为re.sub。即使它已经是一个str,它也不会受到影响。

letters_only = re.sub("[^a-zA-Z]",  # Search for all non-letters
                          " ",          # Replace all non-letters with spaces
                          str(location))

以上是关于re.sub错误与“预期字符串或字节类对象”的主要内容,如果未能解决你的问题,请参考以下文章

python re 与 re.sub替换部分文件

正则表达式:如何将 re.sub 与可变数量的元素一起使用?

Python re.sub 替换 html 属性

Python 2 和 3 're.sub' 不一致

python re.sub 带有要查找的单词列表

python 正则表达式 re.sub & re.subn