Python“;TypeError:应为字符串或缓冲区;使用re和csv

Python“;TypeError:应为字符串或缓冲区;使用re和csv,python,csv,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'[

因此,我正在开发一个程序,从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
文件“/home/ian/Desktop/tweepy_scripts/tweetdownloader_allcsv_v2.py”,第66行,在
行=re.sub(r'[^\w=]','',行)
文件“/usr/lib/python2.7/re.py”,第151行,子文件
return\u compile(模式、标志).sub(repl、字符串、计数)
TypeError:应为字符串或缓冲区
一些帮助会很棒!我是一个初学者,我试图用以前的文章来解决这个问题,但收效甚微

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

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

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

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

这是因为您的行变量是一个列表,而不是一个字符串——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

我不是python专家,但是正则表达式前面的“r”看起来放错了位置
r
很好。它的意思是“原始”或“regex”字符串,即它禁用
\
解释。我猜
中的行不会在字符串上迭代,而是在其他类型的对象上迭代。为了减少混淆,您得到了
TypeError
,因为您将
列表
传递给regex,而不是字符串。但真正的问题是你应该从这个列表中抽出一列。