我正在尝试使用Python3中的genfromtxt
来读取一个包含字符串和数字的简单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']
。我还尝试将文件作为'rb'
模式的open
输出,如此链接所建议的那样,但没有改进。为什么只读取一个列时转换器可以工作,而读取两个列时不能工作?请问您能否建议我在Python3中正确使用genfromtxt
的方法?我做错了什么吗?谢谢!