gpt4 book ai didi

python - 使用 python dtype 作为压缩 csv 的标题

转载 作者:行者123 更新时间:2023-12-01 05:58:00 27 4
gpt4 key购买 nike

我有一个具有结构化dtype的一维numpy元组数组。我正在使用 np.savetxt 将数组写入(压缩的)csv 文件。我只想将 dtype 中的字段名称添加为第一行的标题。当我打印 array.dtype 时,我得到

数组是一个类型的对象:

[('time', '<u8'), ('timeStr', '|S27'), ('person', '|S24'), ...]

我认为从 array.dtype 创建一个元组 ('time', 'timeStr', 'person'...) 并将其添加为数组中的第一个元组可能很简单但 dtype 对象似乎很难处理(例如,您无法迭代它)。

有没有简单的方法可以做到这一点?

编辑:senderle 指出 array.dtype.names 的存在解决了第一个问题。但是,理想情况下,我想输出一个 gzip 压缩的 csv 文件,而不是先写出完整的 csv 文件,然后再压缩它。 np.savetxt 本身支持压缩,但将 header 添加到 numpy 数组似乎会导致问题,因为它的类型错误。

最佳答案

这是获取字段名称元组的简单方法:

>>> a = numpy.array([(1, 2, 3), (4, 5, 6)], dtype=[('time', '<u8'), 
('timeStr', '|S27'),
('person', '|S24')])
>>> a.dtype.names
('time', 'timeStr', 'person')

以下是使用数据创建 csv 文件的简单方法:

>>> with open('data.txt', 'w') as datafile:
... datafile.write(', '.join(a.dtype.names) + '\n')
... numpy.savetxt(datafile, a, '%i, %s, %s')

之后的data.txt内容:

time, timeStr, person
1, 2, 3
4, 5, 6

如果您运行的是 1.7 或更高版本,您还可以将 ', '.join(a.dtype.names) 传递给新的 header范围。 (但请注意,最后一个断言未经测试,因为我的 numpy 版本较旧。)

您可以使用 gzip 模块执行基本相同的操作。不过,这可能会更慢,因为 numpy 可能不再处理压缩。做一些测试。

>>> with gzip.GzipFile('data.gz', 'w') as datafile:
... datafile.write(', '.join(a.dtype.names) + '\n')
... numpy.savetxt(datafile, a, '%i, %s, %s')
...

结果是data.gz,解压后的内容与上面列出的内容相同。

关于python - 使用 python dtype 作为压缩 csv 的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com