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
我怎样才能加快我的程序?我已经提前尝试过许多类似案件在计算器中提到的类型,但它didn't工作。
非常感谢!:)
这可能会更好地服务于[代码审查堆栈交换](https://codereview.stackexchange.com/)。但我不禁想知道pyspark是否会为您更好地处理如此大的文件。 –
您的代码可能因内存问题而中断,在这种情况下,请尝试一次性处理大量数据。就像使用任何采样技术 –
我想知道熊猫是否会是更好的选择。 – mauve