我有一个从WHO网站下载的CSV文件(http://apps.who.int/gho/data/view.main.52160,下载,“
CSV格式的多用途表”)。我尝试将文件加载到numpy数组中。这是我的代码:
import numpy
#U75 - unicode string of max. length 75
world_alcohol = numpy.genfromtxt("xmart.csv", dtype="U75", skip_header=2, delimiter=",")
print(world_alcohol)
我得到
UnicodeDecodeError:’ascii’编解码器无法解码位置2的字节0xc3:序数不在range(128)中。
我猜想numpy在读取字符串“Côted’Ivoire”时遇到问题。该文件已正确编码为UTF-8(根据我的文本编辑器)。我正在使用Python3.4.3和numpy 1.9.2。
我究竟做错了什么?如何将文件读入numpy?
在Python3中,我可以执行以下操作:
In [224]: txt = "Côte d'Ivoire"
In [225]: x = np.zeros((2,),dtype='U20')
In [226]: x[0] = txt
In [227]: x
Out[227]:
array(["Côte d'Ivoire", ''], dtype='<U20')
这意味着我可能可以打开“ UTF-8”文件(常规模式,而不是字节模式),并读取行,并将其分配给数组元素,例如x
。
但是,genfromtxt
坚持使用无法处理较大UTF-8
集合(7字节v
8)的字节字符串(ascii)进行操作。所以我需要decode
在某个时候申请以获得一个U
数组。
我可以使用以下命令将其加载到“ S”数组中genfromtxt
:
In [258]: txt="Côte d'Ivoire"
In [259]: a=np.genfromtxt([txt.encode()],delimiter=',',dtype='S20')
In [260]: a
Out[260]:
array(b"C\xc3\xb4te d'Ivoire", dtype='|S20')
并应用于decode
各个元素:
In [261]: print(a.item().decode())
Côte d'Ivoire
In [325]: print _
Côte d'Ivoire
或用于np.char.decode
将其应用于数组的每个元素:
In [263]: np.char.decode(a)
Out[263]:
array("Côte d'Ivoire", dtype='<U13')
In [264]: print(_)
Côte d'Ivoire
genfromtxt
让我指定converters
:
In [297]: np.genfromtxt([txt.encode()],delimiter=',',dtype='U20',
converters={0:lambda x: x.decode()})
Out[297]:
array("Côte d'Ivoire", dtype='<U20')
如果csv
混合使用字符串和数字,则此converters
方法将比容易使用np.char.decode
。只需为每个字符串列指定转换器。
(请参阅我先前对Python2尝试的编辑)。
问题内容: 我需要解析其他工具生成的文件,该工具无条件输出带有UTF-8 BOM头(EFBBBF)的json文件。我很快发现这就是问题所在,因为Python 2.7模块似乎无法解析它: 删除BOM可以解决问题,但是我想知道是否还有另一种使用BOM头解析json文件的方法? 问题答案: 您可以打开: 或自己解码并传递给:
问题内容: 我有一个很大的CSV文件,准备将其加载到MySQL表中。但是,这些数据被编码为utf-8格式,因为它们包含一些非英语字符。我已经将表中相应列的字符集设置为utf-8。但是当我加载文件时。非英语字符变成怪异字符(当我对表行进行选择时)。将数据加载到表中之前是否需要对数据进行编码?如果是,我该怎么做。我正在使用Python加载数据,并使用LOAD DATA LOCAL INFILE命令。谢
我试图让两个连字符触发短破折号,三个连字符触发长破折号;喜欢 除了工作。以下是我的收获: 这部作品(11部产生2111部产生3部) 这是同一个脚本,但“1”已被替换为“-”,“2”已被替换为“-”,而“3”已被替换为“-“--”-“应该生成”-“和“--”应该生成”-”,但它不起作用,因为我使用的版本中不完全支持Unicode(AutoHotKey.com上的AutoHotKey_L v1.1.0
我是ServiceStack的新手。它具有为数据提供csv文件的功能,但我需要以UTF8格式下载它,因为我得到一些特殊字符。我尝试过这个配置设置。 但运气不好。。请指出我做错了什么。
问题内容: 我有一个形式的字符串: 我想通过评估转义序列将其转换为字符♬。但是,我尝试过的所有操作都会导致错误或打印出垃圾。如何强制Python将转义序列转换为文字unicode字符? 我在其他地方阅读过的内容表明,以下代码行应该可以实现我想要的功能,但是会导致UnicodeEncodeError。 我还尝试了以下方法,其结果相同: 这两种方法都会产生字符串’âx9999’,随后打印将无法处理该字
问题内容: 我需要阅读一个以GBK编码的文本文件。Go编程语言中的标准库假定所有文本均以UTF-8编码。 如何读取其他编码的文件? 问题答案: 以前(如在较早的答案中所述),“简单”的方法是使用需要cgo并包装iconv库的第三方程序包。由于许多原因,这是不希望的。值得庆幸的是,有一段时间以来,仅使用Go Authors提供的软件包(不是在主要软件包中,而是在Go子存储库中),就有了一种上乘的Go