2016-05-10 17 views
0

Обновление: проблема решена. (см. Раздел комментария ниже.) В конечном счете, для преобразования моего .csv в unicode были необходимы следующие две строки: use = [cell.decode ('utf-8') для ячейки в строке], а text = ».join (строка).Python 2.7 и Textblob - TypeError: аргумент `text` передан` __init __ (текст) `должен быть строкой, а не <type 'list'>

Оригинальный вопрос: Я пытаюсь использовать библиотеку Python под названием Textblob для анализа текста из CSV-файла. Ошибка я получаю, когда я звоню Textblob в моем коде:

Traceback (most recent call last): File "C:\Users\Marcus\Documents\Blog\Python\Scripts\Brooks\textblob_sentiment.py", line 30, in blob = TextBlob(row) File "C:\Python27\lib\site-packages\textblob\blob.py", line 344, in init 'must be a string, not {0}'.format(type(text)))TypeError: The text argument passed to __init__(text) must be a string, not

Мой код:

#from __future__ import division, unicode_literals #(This was recommended for Python 2.x, but didn't help in my case.) 

#-*- coding: utf-8 -*- 
import csv 
from textblob import TextBlob 
with open(u'items.csv', 'rb') as scrape_file: 
reader = csv.reader(scrape_file, delimiter=',', quotechar='"') 
for row in reader: 
    row = [unicode(cell, 'utf-8') for cell in row] 
    print row 
    blob = TextBlob(row) 
    print type(blob) 

Я работаю по вопросам UTF/Unicode. У меня первоначально был другой предмет, который я поставил this thread. (Так как мой код и ошибка изменились, я отправляю сообщение в новый поток.) ​​Операторы печати указывают, что переменная «row» имеет тип = str, который, как я думал, указывал на то, что объект-читатель был преобразован по требованию Textblob , Источник .csv-файл сохраняется как UTF-8. Может ли кто-нибудь дать отзыв о том, как я могу разблокировать это, и недостатки в моем коде?
Большое спасибо за помощь.

ответ

0

Так может быть, вы можете внести изменения, как показано ниже:

row = str([cell.encode('utf-8') for cell in row]) 
+0

Спасибо Майкл. К сожалению, когда я заменяю свою предыдущую строку «row =» на ту, которую вы предлагаете выше, я получаю страшную ошибку Unicodedecode, которую я получал с предыдущими версиями моего кода. Эта ошибка: UnicodeDecodeError: кодек 'ascii' не может декодировать байт 0xed в позиции 425: порядковый номер не в диапазоне (128). Я не уверен, что еще делать, так как даже очистка моего исходного файла не поможет мне в следующий раз, когда я его регенерирую. – Marcus

+0

@Marcus Привет, Маркус, не могли бы вы сказать, какую кодировку вы используете для своего терминала? –

+0

Я на ПК с Windows 10. Источник .csv-файл ('items.csv') генерируется из командной строки, используя следующую команду: scrapy crawl newrun -o items.csv. Затем я попытался проверить/изменить кодировку, открыв items.csv в блокноте ++. Надеюсь, это даст вам лучший смысл ... – Marcus