我有多个大文件(> 5M行数据),这些文件按唯一的时间戳排序.所有文件几乎包含所有相同的时间戳,除了少数随机丢失的行(<1000).我想有效地将所有文件中的数据加入到每个时间戳一行的单个数据集中,最好使用生成器.
除了丢失的行,我可以使用zip:
def get_data(list_of_iterables):
for data in zip(*list_of_iterables):
yield data
Run Code Online (Sandbox Code Playgroud)
但是,由于存在一些丢失的行,我需要在时间戳上加入数据而不是简单地压缩.我可以简单地忽略每个文件中没有匹配时间戳的任何行.
是否有一种pythonic方式在几行中实现此功能?
我的方法是依次推进每个迭代,直到它的时间戳不再小于迭代组的最大时间戳.每当所有时间戳匹配时,产生一行并推进所有迭代.但是,当我尝试实现这种方法时,逻辑看起来很混乱.
编辑:表现.
实现需要开始返回行而不首先将所有数据读入内存.读取所有数据需要一段时间,而且很多时候只需要检查第一批数据.
我的第一个猜测是使用一个字典,其中时间戳作为键,行中的其余数据作为值,然后对于每个文件中的每一行,仅当具有相同时间戳(键)的项目不存在时才将其添加到字典中还没有出现。
但是,如果您确实正在处理巨大的数据集(在本例中似乎就是这样),那么您在原始问题中提到的方法将是您的最佳选择。