[英]Converting bytes read from a file using numpy fromfile to unicode in Python 3
[英]how to use split() on python numpy.bytes_ type? (read dictionary from file)
我想从一个(非常大的,空白分隔的,两列)文本文件中读取数据到Python字典中。 我尝试使用for循环执行此操作,但这太慢了。 用numpy loadtxt读取它到结构数组然后将其转换为字典会更快!
data = np.loadtxt('filename.txt', dtype=[('field1', 'a20'), ('field2', int)], ndmin=1)
result = dict(data)
但这肯定不是最好的方法吗? 有什么建议?
我需要别的东西的主要原因是以下不起作用:
data[0]['field1'].split(sep='-')
它会导致错误消息:
TypeError: Type str doesn't support the buffer API
如果存在split()方法,为什么我不能使用它? 我应该使用不同的dtype吗? 或者是否有不同的(快速)方式来读取文本文件? 还有什么我想念的吗?
版本:python版本3.3.2 numpy版本1.7.1
编辑:更改data['field1'].split(sep='-')
到data[0]['field1'].split(sep='-')
标准库split
返回可变数量的参数,具体取决于在字符串中找到分隔符的次数,因此不太适合数组操作。 顺便说一下,我的char numpy数组(我正在运行1.7)没有split
方法。
你有np.core.defchararray.partition
,它类似但对矢量化没有任何问题,以及所有其他字符串操作 :
>>> a = np.array(['a - b', 'c - d', 'e - f'], dtype=np.string_)
>>> a
array(['a - b', 'c - d', 'e - f'],
dtype='|S5')
>>> np.core.defchararray.partition(a, '-')
array([['a ', '-', ' b'],
['c ', '-', ' d'],
['e ', '-', ' f']],
dtype='|S2')
因为: type(data[0]['field1'])
给出<class 'numpy.bytes_'>
,当它有一个“普通”字符串作为参数时, split()
方法不起作用(这是一个bug?)
我解决它的方式: data[0]['field1'].split(sep=b'-')
b'-')(关键是将b放在' - '前面)
当然,Jaime建议使用以下内容非常有用: np.core.defchararray.partition(a, '-')
但在这种情况下,需要使用b'-'
才能使其正常工作。
事实上,这里回答了一个相关的问题: 类型str不支持缓冲区API,虽然乍一看我没有意识到这是同一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.