【发布时间】:2023-04-01 12:53:01
【问题描述】:
我正在尝试将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 读取文件的方式不同,这在某种程度上是 expected。因此我使用转换器来解码字符串:
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' 模式,正如this link 所建议的那样,但没有任何改进。
为什么转换器在只读取一列时工作,而不是在读取两列时工作?您能否建议我在 Python3 中使用 genfromtxt 的正确方法?难道我做错了什么?提前谢谢!
【问题讨论】:
-
这里有什么问题?
-
@wim 已编辑。现在问题应该看起来更清楚了。
-
这里有同样的问题。起初我对使用 bytes b' 文字而不是预期的字符串感到非常困惑。我有 2 列的 csv 文件:0 或 1 值的情绪;和文本 (UTF-16) 使用这种解码方法分别处理列是可行的
标签: python numpy python-3.x genfromtxt