2013-09-25 42 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

相關問題