2015-11-13 76 views
0

因此,我正在研究一個從csv文件抓取Twitter用戶名的程序,並將其插入到一個可以下載所有tweets的函數中。我幾乎已經得到它的工作,除了我認爲從csv行的輸出有括號和撇號,['POTUS']而不是POTUS,Twitter不會接受。Python「TypeError:expected string or buffer」with re and csv

這裏是我使用的代碼:

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

我用來重新嘗試刪除奇怪的字符,但是當我執行的代碼,我得到這個錯誤:

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 

一些幫助會很棒!我是一名初學者,我嘗試使用以前的文章來解決這個問題並沒有產生太大的影響。

+0

我不是蟒蛇專家,但你的正則表達式之前,「R」看上去錯位的 –

+0

的'r'是好的。它意味着「原始」或「正則表達式」字符串,即禁用「\」解釋。 –

+0

我猜'namereader'中的行不是遍歷字符串,而是遍歷一些其他類型的對象 – jez

回答

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 
+0

完美的工作!非常感謝你! –

1

I think the output of the row from the csv has brackets and apostrophes, ['POTUS'] instead of POTUS

不,它沒有。來自csv模塊的行的輸出是liststrs。當您顯示列表時(例如,使用print),它會顯示您描述的標點符號。

而不是將row關閉到Twitter API,您可能需要傳遞該行的單個單元格。第一個單元被稱爲row[0],所以你可能需要:

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