Python:操作大型文本文件

2024-05-16 04:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图读取一个大的txt文件(1.6gb),以便将其内容存储在字典中。我正面临着一个艰难的时间阅读文件,它需要很多来结束。实际上,我不知道运行整个代码所需的确切时间,因为我在等待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中提到的许多类型,但都不起作用。你知道吗

非常感谢!:)


Tags: indatatimetypelinesensortimestampprint
1条回答
网友
1楼 · 发布于 2024-05-16 04:21:52

正如ameyyadav已经提出的那样,分块读取文本文件是一个相当有效的解决方案。为了做到这一点,我可以想出两个解决办法。你知道吗

首先,我建议编写一个生成器,将文本分块处理。然后您可以按任何方式处理每个块。你知道吗

第二个非常方便的python库是Gensim,它有助于处理大型语料库。浏览教程时,您会发现,为了将文档加载到主题建模软件中,很容易使用它,这样就不需要将整个文件加载到内存中,从而大大减少了处理数据的时间。你知道吗

相关问题 更多 >