Python“TypeError:期望的字符串或缓冲区”,带有re和csv

时间:2015-11-13 22:24:07

标签: python csv

因此,我正在开发一个程序,该程序从csv文件中获取Twitter用户名,并将其插入到下载所有推文的函数中。我几乎已经开始工作了,除了我认为csv行的输出有括号和撇号,['POTUS']而不是POTUS,Twitter不接受。

以下是我正在使用的代码:

with open('names.csv') as namescsv:
    namereader = csv.reader(namescsv)
    for row in namereader:
        row = re.sub(r'[^\w=]', '',row)
        print row

我用re来尝试删除奇数字符,但是当我执行代码时出现此错误:

File "/home/ian/Desktop/tweepy_scripts/tweetdownloader_allcsv_v2.py", line 66, in <module>
    row = re.sub(r'[^\w=]', '',row)
File "/usr/lib/python2.7/re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or buffer

一些帮助会很棒!我是初学者,我尝试使用以前的文章来解决问题并没有产生太多。

2 个答案:

答案 0 :(得分:1)

  

我认为来自csv的行的输出有括号和撇号,['POTUS']而不是POTUS

不,它没有。来自csv模块的行的输出是list str s。当您显示列表时(例如,使用print),它会显示您描述的标点符号。

您可能需要传递该行的单个单元格,而不是将row传递给Twitter API。第一个单元格称为row[0],因此您可能需要:

result = whatever.the.twitter.api.is.called(row[0]) 

答案 1 :(得分:1)

这是因为你的行变量是一个列表,而不是一个字符串 - 而且Python警告你它需要一个字符串。尝试这样的事情:

import csv
import re

with open('names.csv') as namescsv:
    namereader = csv.reader(namescsv)
    for row in namereader:
        for cell in row:
            cell = re.sub(r'[^\w=]', '',cell)
            print cell