我正在尝试genfromtxt与Python3一起使用,以读取包含字符串和数字的简单csv文件。例如,类似以下内容(以下称为“ test.csv”):
1,a
2,b
3,c
使用Python2,以下代码可以很好地工作:
import numpy
data=numpy.genfromtxt("test.csv", delimiter=",", dtype=None)
# Now data is something like [(1, 'a') (2, 'b') (3, 'c')]
在Python3中,返回相同的代码[(1, b'a') (2, b'b') (3, b'c')]。由于Python3读取文件的方式不同,所以这在某种程度上是可以预期的。因此,我使用转换器来解码字符串:
decodef = lambda x: x.decode("utf-8")
data=numpy.genfromtxt("test.csv", delimiter=",", dtype="f8,S8", converters={1: decodef})
这适用于Python2,但不适用于Python3(相同的[(1, b'a') (2, b'b') (3, b'c')]输出。但是,如果在Python3中,我使用上面的代码仅读取一列:
data=numpy.genfromtxt("test.csv", delimiter=",", usecols=(1,), dtype="S8", converters={1: decodef})
输出字符串['a' 'b' 'c']已按预期进行解码。
我也试着提供文件的输出open与'rb'模式,在所建议的这个环节,但目前还没有改进。
为什么仅读取一列而不读取两列时转换器起作用?您能否建议我genfromtxt在Python3中使用的正确方法?难道我做错了什么?先感谢您!
噜噜哒
有只小跳蛙
波斯汪
相关分类