【问题标题】:How to write and read nested integer lists to csv如何将嵌套整数列表写入和读取到 csv
【发布时间】:2019-04-05 17:52:52
【问题描述】:

我有一个多维矩阵作为 python 模型的数据输入。为此,我使用了保存在不同模型中的嵌套列表,但也使用了 python。我的问题是如何正确地将这些列表保存为 csv 文件 + 如何正确导入它们。

嵌套列表如下所示:

test = [[[3, 16], [10, 12]], [[4, 2], [14, 6]]]

通过阅读其他示例,我尝试使用以下代码保存它们:

# Write CSV file
kwargs = {'newline': ''}
mode = 'w'
if sys.version_info < (3, 0):
    kwargs.pop('newline', None)
    mode = 'wb'

with open('../data/test.csv', mode, **kwargs) as fp:
    writer = csv.writer(fp, delimiter=',')
    writer.writerows(test)

给出如下输出:

"[3, 16]","[10, 12]"
"[4, 2]","[14, 6]"

看着格式,我问自己这是否真的是为更多维度列表编写文件的正确方法。 => Q1:编写嵌套列表的正确方法是什么?

使用读取文件

# Read CSV file
kwargs = {'newline': ''}
mode = 'r'
if sys.version_info < (3, 0):
    kwargs.pop('newline', None)
    mode = 'rb'
with open('../data/test.csv', mode, **kwargs) as fp:
    reader = csv.reader(fp, delimiter=',')
    data_read = [row for row in reader]

有输出

[['[3, 16]', '[10, 12]'], ['[4, 2]', '[14, 6]']]

格式的差异让我想到第二个问题: => Q2:读取文件时如何取回整数?

我相信这个问题不会那么困难,但我刚开始使用 python,所以我不确定如何调整代码。因此,非常感谢您的帮助!

【问题讨论】:

  • JSON 可能更适合这种数据。
  • 您打算将保存的 CSV 文件与其他(非 Python)软件一起使用吗?如果没有,pickle 列表。

标签: python python-3.x csv export-to-csv


【解决方案1】:

您的问题与 Python 没有任何关系。 CSV 格式不支持嵌套数据结构(例如,列表中的列表)。一种解决方案是使用这样的编码;例如,JSON。或者,如果数据只能由 Python 程序读取,您可以使用 Python 的 pickle 模块来有效地编码/解码对象。

注意:您可以为列表中的列表定义自己的 CSV 元编码。但是你必须想出一个这样做的方案,并为读取序列化数据所需的任何语言编写一个解码器。使用 JSON、protobuf 或其他适当的编码要容易得多。

【讨论】:

    【解决方案2】:

    我之前制作了一个脚本,应该可以解决您的一些问题。

    https://github.com/Yolo-gamer/CDM

    在我的代码中,我的脚本有两种保存数据的方式。

    1. 普通(作为字符串)
    2. 数据(以数据类型保存)

    只需将 cdm.py 文件与您的脚本放在同一文件夹中,然后使用 import cdm

    如需帮助,请键入 help(cdm),代码应为您提供所需的所有信息。

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
    猜你喜欢
    • 2018-08-10
    • 2020-01-03
    • 2022-01-05
    • 1970-01-01
    • 2021-10-09
    • 2014-12-21
    • 2021-08-15
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多