2013-09-25 38 views
1

我有一个问题。这可能很简单,但无论如何我找不到一个好主意。问题是我有2个python程序。首先是给出2个输出,其中一个输出是一个巨大的列表(如拥有数千个其他列表),另一个是Weka的简单csv文件。我需要以某种方式存储此列表(第一个输出),以便稍后能够将其用作其他程序的输入。我不能把它发送到第二个程序,因为当第一个程序完成时,Weka也应该为第二个程序产生新的输出。因此,第二个节目必须等待第一个节目和Weka的输出。 flow graph存储列表,然后将其读取为整数

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

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

如果我写这篇文章的一个txt文件,然后当我试着去阅读它,它需要所有的值作为字符串。有没有什么简单快捷的方式(因为数据很大)以某种方式管理所有的值为整数?或者,也许在第一种情况下,把它写成整数?

+0

顺便说一句,我使用WEKA的GUI。 – genclik27

回答

1

我认为这是使用pickle module

要保存的数据很好的例子:

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对象结构的基本功能,但是功能强大的算法。 “酸洗” 是将Python对象层次结构转换为 字节流的过程,“取消”是相反的操作,由此将字流转换回对象层次结构。酸洗(和 拆除)或者称为“序列化”,“编组”,或者“变平”,但是,为了避免混淆,这里使用的术语 是“酸洗”和“拆除”。

有也快cPickle module

要保存的数据:

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() 
+0

感谢您的帮助。有没有任何按钮或者这样的标记来解决这个问题? – genclik27

+0

@ genclik27 - 是的,请阅读 - http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

1

如何酸洗列表输出而不是将其作为纯文本表示输出?看看你的版本the documentation:它基本上是一种将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')) 
+0

非常感谢,我不知道这个模块。它将用于我的项目。 – genclik27

相关问题