1

Twitter検索APIからリストに保存したデータを使用して.csvファイルを作成しようとしています。選択したキーワード(この場合は「reddit」)を使用して過去100件のツイートを保存し、各ツイートを.csvファイルのセルに保存しようとしています。私のコードは以下のとおりで、次のようなエラーが返されます。

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 0: ordinal not in range(128)

誰かがこれを修正するために私ができることを知っているなら、それは大いにありがたいです!

import sys
import os


import urllib
import urllib2
import json
from pprint import pprint
import csv

import sentiment_analyzer

import codecs

class Twitter:
    def __init__(self):
        self.api_url = {}
        self.api_url['search'] = 'http://search.twitter.com/search.json?'

    def search(self, params):

        url = self.make_url(params, apitype='search')
        data = json.loads(urllib2.urlopen(url).read().decode('utf-8').encode('ascii',     'ignore'))

        txt = []
        for obj in data['results']:
            txt.append(obj['text'])

        return '\n'.join(txt)

    def make_url(self, params, apitype='search'):


        baseurl = self.api_url[apitype] 
        return baseurl + urllib.urlencode(params)


if __name__ == '__main__':
    try:
        query = sys.argv[1]
    except IndexError:
        query = 'reddit'

    t = Twitter()

    s = sentiment_analyzer.SentimentAnalyzer()

    params = {'q': query, 'result_type': 'recent', 'rpp': 100}

    urlName = t.make_url(params)
    print urlName
    txt = t.search(params)

    print s.analyze_text(txt)

    myfile = open('reddit.csv', 'wb')
    wr = csv.writer(myfile, quoting=csv.QUOTE_MINIMAL)
    wr.writerow(txt)
4

2 に答える 2

6

モジュールのPython2ドキュメントからcsv

ノート

このバージョンのcsvモジュールは、Unicode入力をサポートしていません。また、現在、ASCIINUL文字に関していくつかの問題があります。したがって、安全のために、すべての入力はUTF-8または印刷可能なASCIIである必要があります。「例」セクションの例を参照してください。

.csvそうは言っても、 Pythonに組み込まれているUnicode文字列サポートを使用すれば、それほど問題なくファイルを自分で解析できる可能性があります。この答えもあります。

于 2012-12-10T00:10:43.727 に答える
0

この種の問題がまさにPython3の背後にある理由であることがわかります。

Python3ではなくPython2を主張する正当な理由があると思います。おそらく、Python 2.7を提供するホスティングサイトにこれをデプロイしようとしているのか、それともPythonという古いOSを実行しているのでしょう。 3は移植されていません。

ただし、そうでない場合は、切り替えるだけです。Python 2のcsvモジュールはUnicodeを処理せず、明示的にエンコード/デコードした場合でも奇妙な癖があります。filePython 3のものはすべてUnicodeであり、基になる文字セットを処理するために基になるオブジェクトに依存しています。

いくつか変更する必要がありますが、から2to3 -w twitter.pyを削除する場合を除いて、すべての処理を行います。bopen('reddit.csv', 'wb')

于 2012-12-10T01:14:23.897 に答える