1

質問があります。簡単なことかもしれませんが、とにかく良いアイデアが見つかりませんでした。問題は、2 つの Python プログラムがあることです。最初に 2 つの出力を提供します。出力の 1 つは巨大なリスト (別のリストが何千もあるようなもの) で、もう 1 つは Weka の単純な csv ファイルです。このリスト (最初の出力) を保存して、後で他のプログラムの入力として使用できるようにする必要があります。最初のプログラムが完了すると、Weka も 2 番目のプログラムの新しい出力を生成する必要があるため、2 番目のプログラムに送信することはできません。したがって、2 番目のプログラムは、最初のプログラムと 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)

次に、次の方法を使用して、2 番目のプログラムからそれを読み込みます。

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 オブジェクト構造をシリアライズおよびデシリアライズするための基本的かつ強力なアルゴリズムを実装しています。「ピッキング」は Python オブジェクト階層をバイト ストリームに変換するプロセスであり、「アンピクル」は逆の操作であり、バイト ストリームをオブジェクト階層に変換します。ピクルス化 (およびアンピクリング) は、「シリアライゼーション」、「マーシャリング」[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 に答える