2017-01-31 5 views
0

私は.txtファイルに格納された大きなデータを含むプロジェクトに取り組んでいます。私のプログラムは少し遅いです。私の考えでは、私のプログラムが非効率的にファイルを解析するという理由があります。Python - 最適化ファイルの解析

FILEサンプル:

X | Y | Weight 
-------------- 

1 1 1 
1 2 1 
1 3 1 
1 4 1 
1 5 1 
1 6 1 
1 7 1 
1 8 1 
1 9 1 
1 10 1 

パーサCODE:私は何行がなくなるまで処理するデータの小さなチャンクを解析し、この関数は、NumberOfRows/N回呼び出される

def _parse(pathToFile): 
    with open(pathToFile) as f: 
    myList = [] 
    for line in f: 
     s = line.split() 
     x, y, w = [int(v) for v in s] 
     obj = CoresetPoint(x, y, w) 
     myList.append(obj) 
    return myList 

左。私の.txtはいくつかですギガバイトです。

私は明らかにループ内でNumberOfLines回繰り返していることがわかります。これは大きなボトルネックであり、BADです。これは私の質問に私をリード:

質問: ファイルを解析するための適切なアプローチとは何か、そうするための最も効率的な方法だろうと.txtで異なるデータを整理なるかは、パーサーを留めますか?もしそうなら、私はどのようにしてdatafileの中に編成すべきですか?

答えて

1

Pythonでは、これを行うライブラリがPandasと呼ばれています。ファイルがメモリにすべて一緒にロードするには大きすぎる場合は、あなたがデータの一部をループはできる

import pandas as pd 
df = pd.read_csv('<pathToFile>.txt') 

とを1つずつ読み込む:次のようにパンダを使用してデータをインポートします。 Hereこれを行うのに役立つかなり良いブログ記事です。

+0

私はメインメモリ上のファイル全体を非常に大きくすることはできませんが、これをメインメモリに持ち込まないでしょうか? –

+0

はいこれはメモリに取り込まれます。それはどれくらい大きいですか?あなたがスパークのRDDのような分散されたものに入るべきであるよりも本当に必要なら、それは時間がかかるでしょう。データのサンプリングはどうですか?この質問を見て:http://stackoverflow.com/questions/22258491/read-a-small-random-sample-from-a-big-csv-file-into-a-python-data-frame、ループすることができますすべてのデータを一度にメモリにロードしないようにします。 – lorenzori

関連する問題