Python:动态处理大文档的行

标签 python readlines

我有一个看起来有点像这样的文档:

key1 value_1_1 value_1_2 value_1_3 etc
key2 value_2_1 value_2_2 value_2_3 etc
key3 value_3_1 value_3_2 value_3_3 etc
etc

其中每个是一个字符串,每个是一个 float ,全部用空格分隔。每行都有数百个与其关联的值,并且有数十万行。每行都需要以特定的方式处理,但因为我的程序只需要一小部分行的信息,所以立即处理每一行似乎是巨大的时间浪费。目前,我只有每个未处理行的列表,并维护一个包含每个的单独列表。当我需要访问一行时,我将使用 key 列表来查找所需行的索引,然后处理行列表中该索引处的行。我的程序可能会要求多次查找同一行,这会导致一遍又一遍地重复处理同一行,但似乎仍然比从一开始就处理每一行要好。

我的问题是,有没有更有效的方法来完成我正在做的事情?

(如果我需要做出任何澄清,请告诉我)

谢谢!

最佳答案

首先,我会将您的行存储在 dict 中。这可能会使基于键的查找速度更快。制作这个字典就像d = dict(line.split(' ', 1) for line in file_obj)一样简单。例如,如果按键具有固定宽度,您可以通过切割线条来加快速度。

接下来,如果行处理的计算量很大,您可以缓冲结果。我通过子类化 dict 解决了这个问题:

class BufferedDict(dict):
    def __init__(self, file_obj):
        self.file_dict = dict(line.split(' ', 1) for line in file_obj)

    def __getitem__(self, key):
        if key not in self:
            self[key] = process_line(self.file_dict[key])
        return super(BufferedDict, self).__getitem__(key)

def process_line(line):
    """Your computationally heavy line processing function"""

这样,如果您调用 my_buffered_dict[key],只有在处理后的版本尚不可用时,才会处理该行。

关于Python:动态处理大文档的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43820434/

相关文章:

python - 文本转列功能

python - Python 中强制关键字参数的默认参数的用途是什么?

python - 多个相关的 Python 项目是否需要自己的虚拟环境?

r - 在R中处理readLines()函数

python - 如何使用 python 更快地读取文件中的几行?

c - 理解来自 K&R 的代码

python - Pandas 数据框循环

python - 将 __float__ 与非浮点类型一起使用

Python连续读取文件