2017-05-26 19 views
0

辞書にその内容を格納するために大きなtxtファイル(1.6 GB)を読み込もうとしています。私はファイルを読むのに苦労しています。実は私は:(待っているの10分後に停止したため、全体のコードを実行するために必要な正確な時刻を知るドントPython:大きなテキストファイルを操作する

ここでは、コードは次のようになります。

import numpy as np 
import pylab as pl 
import matplotlib.pyplot as plt 
import fileinput 
import time 



def extractdata2(): 
    start_time = time.time() 
    accel_data = { 'timestamp': [], 'sensor': [], 'x': [], 'y': [], 'z': [] } 
    accel_uncalib_data = { 'timestamp': [], 'sensor': [], 'x_uncalib': [], 'y_uncalib': [], 'z_uncalib': [], 'x_bias': [], 'y_bias': [], 'z_bias': [] } 
    gyro_data = { 'timestamp': [], 'sensor': [], 'x': [], 'y': [], 'z': []} 
    gyro_uncalib_data = { 'timestamp': [], 'sensor': [], 'x_uncalib': [], 'y_uncalib': [], 
'z_uncalib': [], 'x_drift': [], 'y_drift': [], 'z_drift': []} 
    magnet_data = { 'timestamp': [], 'sensor': [], 'x': [], 'y': [], 'z': [] } 
    magnet_uncalib_data = { 'timestamp': [], 'sensor': [], 'x_uncalib': [], 'y_uncalib': [], 'z_uncalib': [], 'x_bias': [], 'y_bias': [], 'z_bias': []} 

    with open("accelerometer.txt") as myfile: 
     for line in myfile: 
      line = line.split(',') 
      if "TYPE_ACCELEROMETER" in line: 
        #IMU_data["accel_data"] = line # the line must be split in 4 camps 

       accel_data["timestamp"].append(line[ 0 ]) 
       accel_data["sensor"].append(line[ 1 ]) 
       accel_data["x"].append(line[ 2 ]) 
       accel_data["y"].append(line[ 3 ]) 
       accel_data["z"].append(line[ 4 ]) 
       #print(accel_data) 
      elif "TYPE_ACCELEROMETER_UNCALIBRATED" in line: 
       accel_uncalib_data["timestamp"].append(line[ 0 ]) 
       accel_uncalib_data["sensor"].append(line[ 1 ]) 
       accel_uncalib_data["x_uncalib"].append(line[ 2 ]) 
       accel_uncalib_data["y_uncalib"].append(line[ 3 ]) 
       accel_uncalib_data["z_uncalib"].append(line[ 4 ]) 
       accel_uncalib_data["x_bias"].append(line[ 5 ]) 
       accel_uncalib_data["y_bias"].append(line[ 6 ]) 
       accel_uncalib_data["z_bias"].append(line[ 7 ]) 
       #print(accel_uncalib_data) 
      elif "TYPE_GYROSCOPE" in line: 
       gyro_data["timestamp"].append(line[ 0 ]) 
       gyro_data["sensor"].append(line[ 1 ]) 
       gyro_data["x"].append(line[ 2 ]) 
       gyro_data["y"].append(line[ 3 ]) 
       gyro_data["z"].append(line[ 4 ]) 
       #print(gyro_data) 
      elif "TYPE_GYROSCOPE_UNCALIBRATED" in line: 
       gyro_uncalib_data["timestamp"].append(line[ 0 ]) 
       gyro_uncalib_data["sensor"].append(line[ 1 ]) 
       gyro_uncalib_data["x_uncalib"].append(line[ 2 ]) 
       gyro_uncalib_data["y_uncalib"].append(line[ 3 ]) 
       gyro_uncalib_data["z_uncalib"].append(line[ 4 ]) 
       gyro_uncalib_data["x_drift"].append(line[ 5 ]) 
       gyro_uncalib_data["y_drift"].append(line[ 6 ]) 
       gyro_uncalib_data["z_drift"].append(line[ 7 ]) 
       #print(gyro_uncalib_data) 
      elif "TYPE_MAGNETIC_FIELD" in line: 
       magnet_data["timestamp"].append(line[ 0 ]) 
       magnet_data["sensor"].append(line[ 1 ]) 
       magnet_data["x"].append(line[ 2 ]) 
       magnet_data["y"].append(line[ 3 ]) 
       magnet_data["z"].append(line[ 4 ]) 
       #print(magnet_data) 
      elif "TYPE_MAGNETIC_FIELD_UNCALIBRATED" in line:   
       magnet_uncalib_data["timestamp"].append(line[ 0 ]) 
       magnet_uncalib_data["sensor"].append(line[ 1 ]) 
       magnet_uncalib_data["x_uncalib"].append(line[ 2 ]) 
       magnet_uncalib_data["y_uncalib"].append(line[ 3 ]) 
       magnet_uncalib_data["z_uncalib"].append(line[ 4 ]) 
       magnet_uncalib_data["x_bias"].append(line[ 5 ]) 
       magnet_uncalib_data["y_bias"].append(line[ 6 ]) 
       magnet_uncalib_data["z_bias"].append(line[ 7 ]) 
       #print(magnet_uncalib_data) 

    print("--- %s seconds ---" % (time.time() - start_time)) 

    return accel_data, accel_uncalib_data, gyro_data, gyro_uncalib_data, magnet_data, magnet_uncalib_data 

は、どのように私は私のルーチンをスピードアップすることができますか?私は同様のケースではStackOverflowの上で言及したタイプが、それはdidn't作業の多くを試してみました。

事前に多くの感謝を!:)

+0

これは、[コードレビュースタック交換](https://codereview.stackexchange.com/)のほうが良いでしょう。しかし、私は助けることができないが、pysparkがあなたのためにそのような大きなファイルをうまく処理するかどうか疑問に思う。 –

+0

メモリの問題によりコードが破損している可能性があります。その場合は、一度にデータのチャンクを処理して処理してください。任意のサンプリングテクニックを使用するのと同じように –

+1

パンダがあなたにとってより良い選択肢になるのではないかと思います。 – mauve

答えて

0

Ameyヤダヴが既にチャンクでテキストファイルを読み込む示唆したように、むしろあります効率的なソリューションです。そのためには、私は2つの解決策を考えることができます。

まず、テキストをチャンクで処理するジェネレータを作成することをお勧めします。次に、各チャンクを任意の方法で処理できます。

第2に、大規模なコーパスで役に立ちそうな便利なPythonライブラリはGensimです。チュートリアルを読むと、ファイル全体をメモリに読み込む必要がなく、処理時間が大幅に短縮されるように、トピックモデリングソフトウェアにドキュメントを読み込むために使用するのはかなり簡単ですあなたのデータ。

関連する問題