UnicodeEncodeError:'latin-1'编解码器不能编码位置0-5的字符:序数不在范围内(256)

时间:2016-07-27 02:15:13

标签: python

大家好! 我使用python3(pycharm),我的代码是这样的:

# -*- coding: utf-8 -*-
import numpy

c=numpy.loadtxt('test.csv',dtype="str_",delimiter=',',usecols=(6,),unpack=True)

当我在test.csv中有一些中文单词时,我收到了这样的错误:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)

我试图对文件进行编码,如下所示:

c=numpy.loadtxt('test.csv'.encode('utf-8'),dtype="str_",skiprows=0,delimiter=',',usecols=(6,),unpack=True)

然后,我又出现了另一个错误:

IndexError: list index out of range

此外,文件中的中文单词长度超过64。

我浪费了很多时间,请帮帮忙!

2 个答案:

答案 0 :(得分:0)

with open('test.csv', encoding='utf-8') as fh:
    numpy.loadtxt(fh, dtype="str_", delimiter=',', usecols=(6,), unpack=True)

答案 1 :(得分:0)

当我们将汉字读成numpy时,数据类型不能是一个简单的字符串,因为它将字符视为ASCII不足以容纳UTF-8字符。

所以我在这里所做的就是让numpy知道我们正在读一个4字节的字符,而这足以容纳一个unicode字符。

我使用了以下示例数据进行测试:

1,2,3,4,5,6,7
一,二,三,四,五,六,七

以下是我使用的代码:

# -*- coding: utf-8 -*-
import numpy
c=numpy.genfromtxt('test.csv',dtype="S4",delimiter=',',usecols=(6,),unpack=True)

for txt in c:
    print(txt.decode("utf-8"))

您可以进一步查看以下链接以了解更多信息:
1. How many bytes does one Unicode character take?
2. Numpy Data type objects