我正在尝试读取一个大的txt文件(1.6 GB),以便将其内容存储在词典中。我正在阅读文件时遇到困难,需要花很多时间才能完成。实际上我不知道运行整个代码所需的确切时间,因为我在等待10分钟后停止了:(。
以下是代码:
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上提到的许多类型,但它没有用。
非常感谢提前! :)
答案 0 :(得分:0)
正如Amey Yadav已经建议以块的形式阅读文本文件是一种相当有效的解决方案。为了做到这一点,我可以想到两个解决方案。
首先,我建议编写一个以块的形式处理文本的生成器。然后,您可以按照自己的方式处理每个块。
其次,一个帮助大型语料库的相当方便的python库是Gensim。通过教程,您会发现使用它非常容易将文档加载到主题建模软件中,这样就不需要将整个文件加载到内存中你处理数据的时间要少得多。