我正在尝试使用numpy.genfromtxt函数导入包含字符串和数字列的txt。本质上,我需要一个字符串数组。下面是一个给我带来麻烦的示例txt:
H2S 1.4
C1 3.6txt被编码为unicode。下面是我使用的代码:
import numpy as np
decodf= lambda x: x.decode('utf-16')
sample = np.genfromtxt(('ztest.txt'), dtype=str,
converters = {0:decodf, 1:decodf},
delimiter='\t',
usecols=0)
print(sample)下面是输出:
['H2S' 'None']我已经尝试了几种方法来解决这个问题。通过放置dtype=None并去掉转换器,我得到:
[b'\xff\xfeH\x002\x00S' b'\x00g\x00\xe8\x00n']我还试着去掉转换器并将dtype=str放入其中,结果得到:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)我知道这是一个麻烦的函数。我看到了不同的选择(例如:here),但无法让任何人工作。
我做错了什么?同时,我正在调查熊猫...提前感谢
发布于 2015-12-01 23:06:39
您的文件编码为UTF-16,前两个字符是BOM。
试试这个(使用python 2.7):
import io
import numpy as np
with io.open('ztest.txt', 'r', encoding='UTF-16') as f:
data = np.genfromtxt(f, delimiter='\t', dtype=None, usecols=[0]) # or dtype=str当在带有Unicode文件的python3中运行时,genfromtxt有一些问题。作为一种变通办法,您可以在将这些行传递给genfromtxt之前对它们进行编码。例如,在将每行传递给genfromtxt之前,以下代码将每行都编码为拉丁文-1
import io
import numpy as np
with io.open('ztest.txt', 'r', encoding='UTF-16') as f:
lines = [line.encode('latin-1') for line in f]
data = np.genfromtxt(lines, delimiter='\t', dtype=None, usecols=[0])https://stackoverflow.com/questions/34023024
复制相似问题