首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.txt输入的numpy genfromtxt问题

.txt输入的numpy genfromtxt问题
EN

Stack Overflow用户
提问于 2015-12-01 22:40:26
回答 1查看 1.5K关注 0票数 0

我正在尝试使用numpy.genfromtxt函数导入包含字符串和数字列的txt。本质上,我需要一个字符串数组。下面是一个给我带来麻烦的示例txt:

代码语言:javascript
复制
    H2S 1.4
    C1  3.6

txt被编码为unicode。下面是我使用的代码:

代码语言:javascript
复制
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)

下面是输出:

代码语言:javascript
复制
['H2S' 'None']

我已经尝试了几种方法来解决这个问题。通过放置dtype=None并去掉转换器,我得到:

代码语言:javascript
复制
[b'\xff\xfeH\x002\x00S' b'\x00g\x00\xe8\x00n']

我还试着去掉转换器并将dtype=str放入其中,结果得到:

代码语言:javascript
复制
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)

我知道这是一个麻烦的函数。我看到了不同的选择(例如:here),但无法让任何人工作。

我做错了什么?同时,我正在调查熊猫...提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-12-01 23:06:39

您的文件编码为UTF-16,前两个字符是BOM

试试这个(使用python 2.7):

代码语言:javascript
复制
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

代码语言:javascript
复制
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])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34023024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档