我有一个多维矩阵作为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]"
看看格式,我问自己这是否真的是为更多维度列表编写文件的正确方法。 =>问题1:编写嵌套列表的正确方法是什么?
使用读取文件
# 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]']]
格式上的差异使我想到第二个问题: =>问题2:如何在读取文件时取回整数?
我相信这个问题不会那么困难,但是我刚刚开始使用python,所以我不确定如何调整代码。因此,非常感谢您的帮助!
答案 0 :(得分:0)
您的问题实际上与Python没有任何关系。 CSV格式不支持嵌套的数据结构(例如列表中的列表)。一种解决方案是使用编码来实现。例如JSON。另外,如果仅由Python程序读取数据,则可以使用python的pickle
模块有效地对对象进行编码/解码。
注意:您可以为列表中的列表定义自己的CSV元编码。但是,随后您必须找出一种实现方案,并为读取序列化数据所需的任何语言编写解码器。使用JSON,protobufs或其他合适的编码要容易得多。
答案 1 :(得分:-1)
我以前已经制作了一个脚本,可以解决您的一些问题。
https://github.com/Yolo-gamer/CDM
在我的代码中,脚本保存数据有两种方式。
所有需要的是cdm.py文件与脚本位于同一文件夹中,然后使用import cdm
要获得帮助,请键入help(cdm),代码应会为您提供所需的所有信息。