我正在尝试使用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 中使用的正确方法?难道我做错了什么?先感谢您!