使用JSON和CSV进行Python编码问题

时间:2016-07-21 22:34:53

标签: python json csv utf-8

我在运行下面的脚本时出现编码问题: 这是错误代码: -UnicodeEncodeError:'ascii'编解码器无法对位置9中的字符u'\ xe9'进行编码:序数不在范围内(128)

这是我的剧本:

import logging
import urllib
import csv
import json
import io
import codecs

with open('/home/local/apple.csv',
          'rb') as csvinput:
    reader = csv.reader(csvinput, delimiter=',')
    firstline = True
    for row in reader:
        if firstline:
            firstline = False
            continue

        address1 = row[0]
        print row[0]
        locality = row[1]
        admin_area = row[2]
        query = ' '.join(str(x) for x in (address1, locality, admin_area))
        normalized = query.replace(" ", "+")
        BaseURL = 'http://localhost:8080/verify?country=JP&freeform='
        URL = BaseURL + normalized
        print URL
        data = urllib.urlopen(URL)
        response = data.getcode()
    print response

        if response == 200:
            file= json.load(data)
        print file
        output_f=open('output.csv','wb')
        csvwriter=csv.writer(output_f)
            count = 0
            for f in file:
        if count == 0:
            header= f.keys()
            csvwriter.writerow(header)
            count += 1
        csvwriter.writerow(f.values())
        output_f.close()
        else:
            print 'error'

任何人都可以帮我修复它真的很烦人。我需要编码为utf8

1 个答案:

答案 0 :(得分:1)

看起来你正在使用Python 2.x而不是python的标准open,使用codecs.open,你可以选择传递一个编码来使用,以及在出现错误时该怎么做。在Python 3中稍微不那么容易混淆,标准的Python open可以做到这一点。

所以在你打开的两行中,请执行:

with codecs.open('/home/local/apple.csv',
      'rb', 'utf-8') as csvinput:

output_f = codecs.open('output.csv','wb', 'utf-8')

可选的错误parm默认为“strict”,如果字节无法映射到给定的编码,则会引发异常。在某些情况下,您可能希望使用“忽略”或“替换”。

有关详情,请参阅the python doc