gpt4 book ai didi

python - 需要帮助找出此 UnicodeDecodeError 的解决方案

转载 作者:行者123 更新时间:2023-12-01 05:56:57 24 4
gpt4 key购买 nike

当我使用此代码时(改编自Stephen Holiday code - 谢谢斯蒂芬提供您的代码!):

#!/usr/bin/env python    
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-

"""
USSSALoader.py
"""
import os
import re
#import urllib2
from zipfile import ZipFile
import csv
import pickle

def getNameList():
namesDict=extractNamesDict()
maleNames=list()
femaleNames=list()
for name in namesDict:
counts=namesDict[name]
tuple=(name,counts[0],counts[1])
if counts[0]>counts[1]:
maleNames.append(tuple)
elif counts[1]>counts[0]:
femaleNames.append(tuple)
names=(maleNames,femaleNames)
return names

def extractNamesDict():
zf=ZipFile('names.zip', 'r')
filenames=zf.namelist()

names=dict()
genderMap={'M':0,'F':1}

for filename in filenames:
file=zf.open(filename,'r')
rows=csv.reader(file, delimiter=',')

for row in rows:
name=row[0].upper()
# name=row[0].upper().encode('utf-8')
gender=genderMap[row[1]]
count=int(row[2])

if not names.has_key(name):
names[name]=[0,0]
names[name][gender]=names[name][gender]+count

file.close()
print '\tImported %s'%filename
return names

if __name__ == "__main__":
getNameList()

我收到此错误:

  iterator = raw_query.Run(**kwargs)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore.py", line 1622, in Run
itr = Iterator(self.GetBatcher(config=config))
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore.py", line 1601, in GetBatcher
return self.GetQuery().run(_GetConnection(), query_options)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore.py", line 1490, in GetQuery
filter_predicate=self.GetFilterPredicate(),
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore.py", line 1534, in GetFilterPredicate
property_filters.append(datastore_query.make_filter(name, op, values))
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\datastore\datastore_query.py", line 107, in make_filter
properties = datastore_types.ToPropertyPb(name, values)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore_types.py", line 1745, in ToPropertyPb
pbvalue = pack_prop(name, v, pb.mutable_value())
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore_types.py", line 1556, in PackString
pbvalue.set_stringvalue(unicode(value).encode('utf-8'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 1: ordinal not in range(128)

当我的名字带有非 ASCII 字符(如“Chávez”或“Barañao”)时,就会发生这种情况。我尝试这样做来解决这个问题:

     for row in rows:
# name=row[0].upper()
name=row[0].upper().encode('utf-8')
gender=genderMap[row[1]]
count=int(row[2])

但是,然后,我得到了另一个错误:

 File "C:\Users\CG\Desktop\Google Drive\Sci&Tech\projects\naivebayes\USSSALoader.py", line 17, in getNameList
namesDict=extractNamesDict()
File "C:\Users\CG\Desktop\Google Drive\Sci&Tech\projects\naivebayes\USSSALoader.py", line 43, in extractNamesDict
name=row[0].upper().encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 3: ordinal not in range(128)

我也尝试过这个:

def extractNamesDict():
zf=ZipFile('names.zip', 'r', encode='utf-8')
filenames=zf.namelist()

但是ZipFile没有这样的参数。

那么,如何解决这个问题,避免非 ASCII 名称出现此 UnicodeDecodeError 问题?

我将此代码与 GAE 一起使用。

最佳答案

看起来您的第一个回溯与 AppEngine 相关。您是否正在构建一个将填充数据存储的加载程序?如果是这样,查看包含模型并执行“放置”操作的代码将会有所帮助。我可能会被某人纠正,但为了使该作品发挥作用,我相信您实际上需要解码而不是编码(即,当您在阅读之前阅读该表时) put,根据您的情况使用 decode('utf-8')decode('latin1') 将字符串转换为 unicode )。

就您的本地代码而言,我不会假装了解 Unicode 处理的深层内部原理,但我通常使用 decode()encode() 处理这些类型的情况。我相信要使用的正确编码取决于底层文本(这意味着您需要知道它是编码 utf-8 还是 latin-1 等)。这是对您的示例的快速测试:

>>> s = 'Chávez'
>>> type(s)
<type 'str'>
>>> u = s.decode('latin1')
>>> type(u)
<type 'unicode'>
>>> e = u.encode('latin1')
>>> print e
Chávez

在这种情况下,我需要使用 latin1 来解码编码的字符串(我使用的是终端),但在您的情况下使用 utf-8 可能会很好工作。

关于python - 需要帮助找出此 UnicodeDecodeError 的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11997184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com