Python re.sub():期望的字符串或类似字节的对象

时间:2017-10-04 09:56:18

标签: python regex twitter

我通过用空字符串替换https://#@之前的任何字词来收集推文并过滤每条推文。我有一个过滤功能就是这样:

def filter(line):
        pattern  = r"(https?://|[@#])\S*"
        s = re.sub(pattern, '', line)
        return s

当我尝试运行它时,Python会返回此错误:

 File "C:\Users\John\Desktop\Sia_prefExer02.py", line 36, in <module>
    filteredLine = filter(line)
  File "C:\Users\John\Desktop\Sia_prefExer02.py", line 25, in filter
    s = re.sub(pattern, '', line)
  File "C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\re.py", line 191, in sub
    return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object

第36行是: filteredLine = filter(line) 第25行是: s = re.sub(pattern, '', line)

这里似乎有什么问题? 这与API有关吗?我使用的是Tweepy。

1 个答案:

答案 0 :(得分:0)

我会假设您在每条推文上运行tweet.text方法。

但是根据Tweepy docs“Hello Tweepy”示例,您应该在import tweepy auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) public_tweets = api.home_timeline() for tweet in public_tweets: print tweet.text 上运行它:

Status

如果查看API Reference,您会发现大多数方法返回filteredLine = filter_tweet(line)个对象。 (这无疑是难以阅读的代码!)

您可以将函数包装起来,并将第36行替换为def filter_tweet(status): return filter(status.text)

tweet_status

旁注:如果是这种情况,我会将您的行变量重命名为Status或其他某些内容,以便您可以更好地猜测它是{{1}}对象,而不是字符串。

如果这不起作用,请粘贴您的代码,以便我们能够正确诊断问题。因为我真的很想出去。