1

我有个问题。这可能很容易,但无论如何我找不到一个好主意。问题是我有 2 个 python 程序。首先是提供 2 个输出,一个输出是一个巨大的列表(比如有数千个其他列表),另一个是 Weka 的简单 csv 文件。我需要以某种方式存储此列表(第一个输出),以便以后能够将其用作其他程序的输入。我不能只将它发送到第二个程序,因为当第一个程序完成后,Weka 还应该为第二个程序生成新的输出。因此,第二个程序必须等待第一个程序和 Weka 的输出。 流程图

问题是输出列表包含丢失的具有数值的列表。简单的例子可能是:

list1 = [[1,5,7],[14,3,27], [19,12,0], [23,8,17], [12,7]] 

如果我把它写在一个 txt 文件上,那么当我尝试读取它时,它会将所有值作为字符串。是否有任何简单快捷的方法(因为数据很大)以某种方式将所有值都作为整数进行管理?或者也许在第一种情况下,将其写为整数?

4

2 回答 2

1

腌制列表输出而不是将其输出为明文表示如何?查看您的版本的文档:它基本上是一种将 Python 对象写入文件的方法,然后您可以随时从 Python 中读取该文件以获取相同的对象。

打开要输出到的文件后,输出差异将非常小,例如

import pickle

my_list = [[1, 2], [134, 76], [798, 5, 2]]
with open('outputfile.pkl', 'wb') as output:
    pickle.dump(my_list, output, -1)

然后只需使用以下方式从您的第二个程序中读取它:

import pickle
my_list = pickle.load(open('outputfile.pkl', 'rb'))
于 2013-09-25T08:44:52.833 回答
1

我认为这是使用pickle 模块的好案例

保存数据:

import pickle

lst = [[1,5,7],[14,3,27], [19,12,0], [23,8,17], [12,7]]
pickle.dump(lst, open('data.pkl', 'wb'))

从保存的文件中读取数据:

import pickle

lst = pickle.load(open('data.pkl', 'r')

从文档:

pickle 模块实现了一个基本但强大的算法,用于序列化和反序列化 Python 对象结构。“Pickling”是将 Python 对象层次结构转换为字节流的过程,而“unpickling”是逆操作,从而将字节流转换回对象层次结构。酸洗(和解酸)也称为“序列化”、“编组”、[1] 或“扁平化”,但是,为避免混淆,这里使用的术语是“酸洗”和“解酸”。

还有更快的cPickle 模块

保存数据:

from cPickle import Pickler

p = Pickler(open('data2.pkl', 'wb'))
p.dump(lst)

从保存的文件中读取数据:

from cPickle import Unpickler

up = Unpickler(open('data.pkl', 'r'))
lst = up.load()
于 2013-09-25T08:45:45.260 回答