【问题标题】:ascii codec can't encode character, python 2.6ascii编解码器无法编码字符,python 2.6
【发布时间】:2016-05-12 14:39:05
【问题描述】:

我知道这是一个常见的初学者问题,在堆栈交换中有大量这样的问题,我一直在搜索它们,但我仍然无法弄清楚。我有一些来自抓取的数据,看起来像这样(列表中大约有 1000 个项目):

inputList = [[u'someplace', u'3901 West Millen Drive', u'Hobbs', u'NH', 
u'88240', u'37.751117', u'-103.187709999'], [u'\u0100lon someplace', u'3120 
S Las Vegas Blvd', u'Las Duman', u'AL', u'89109', u'36.129066', u'-145.168791']]

我正在尝试将其写入这样的 csv 文件:

for i in inputList:
    for ii in i:
        ii.replace(" u'\u2019'", "") #just trying to get rid of offending character
        ii.encode("utf-8")

def csvWrite(inList, outFile):
    import csv
    destination = open(outFile, 'w')
    writer = csv.writer(destination, delimiter = ',')
    data = inList   
    writer.writerows(data)
    destination.close()
csvWrite(inputList, output)

但我不断收到此错误,writer.writerows(data):

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

我尝试了很多不同的方法来对列表中的数据进行编码,但仍然总是出错。我愿意忽略无法编码为ascii的字符。谁能指出我正确的方向,我正在使用python2.6

【问题讨论】:

  • 是的,我确实是这样想的,但修复那条线后我仍然遇到同样的错误

标签: python character-encoding python-2.x


【解决方案1】:

这条线似乎很奇怪:ii.replace(" u'\u2019'", ""),你的意思是ii.replace(u"\u2019", u"") 吗?

【讨论】:

    【解决方案2】:

    如果您只是想删除那些坏字符,您可以使用以下代码:

    for i in inputList:
        for ii in i:
            ii = "".join(list( filter((lambda x: ord(x) < 128), ii)))
            print ii
    

    输出:

    someplace
    3901 West Millen Drive
    Hobbs
    NH
    88240
    37.751117
    -103.187709999
    lon someplace
    3120 S Las Vegas Blvd
    Las Duman
    AL
    89109
    36.129066
    -145.168791
    

    最终代码将如下所示:

    inputList = [[u'someplace', u'3901 West Millen Drive', u'Hobbs', u'NH', 
    u'88240', u'37.751117', u'-103.187709999'], [u'\u0100lon someplace', u'3120 S Las Vegas Blvd', u'Las Duman', u'AL', u'89109', u'36.129066', u'-145.168791']]
    
    cleared_inputList = []
    
    for i in inputList:
        c_i = []
        for ii in i:
            ii = "".join(list( filter((lambda x: ord(x) < 128), ii)))
            c_i.append(ii)
        cleared_inputList.append(c_i)
    
    def csvWrite(inList, outFile):
        import csv
        destination = open(outFile, 'w')
        writer = csv.writer(destination, delimiter = ',')
        data = inList   
        writer.writerows(data)
        destination.close()
    
    
    csvWrite(cleared_inputList, output)
    

    【讨论】:

    • @J.Hammond 那是因为你还没有更新inputList,我会编辑我的答案来更新。
    • 谢谢你的帮助。它现在不会抛出编码错误,并且从 clear_inputList 中删除了坏字符。但是,即使我从cleared_inputList 写入,我仍然无法写入所有行。它停在这个项目上。 [u'Billy\u2019s Casino', u'233 West Bennett Avenue', u'Cripple Creek', u'CO', u'80813', u'38.746838', u'-105.177332500']
    • @J.Hammond 写什么和哪个项目?
    • 对不起,我没有投反对票,至少不是故意的,我似乎无法删除它
    猜你喜欢
    • 2019-02-03
    • 2016-02-12
    • 2015-10-21
    • 2010-12-11
    • 2012-07-02
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多