我有一个〜27.000对象的列表。每个对象代表文件中的一行,其中每一行是某个仪器的测量记录。 该对象最重要的方面是: 仪器名称:Int(49099,89,..) 工作站名称:字符串(K-900,MK-45,..) 时间:日期时间对象(13:34:17 01/02/2017)
所有这些对象都将用于创建.h5文件,其中最顶层的“层”是度量。每个测量都包含多个这些线对象,它们具有相同的名称,并且在某个持续时间(30分钟)内具有时间差异。一个主要问题是,在创建线对象时,我正在读取的数据文件是非常非结构化的。我不能假定文件中彼此相邻的行之间有任何关系,因此我无法将每一行与上一行进行比较以在阅读部分中具有一些过滤逻辑。即使是在同一日期生成的文件也应该看起来相似,只是使用不同的乐器名称,但是这种情况并非如此。这就是为什么我要全部阅读它们,然后将所有行相互比较。但是,这需要很长时间,并且根本无法扩展。
提供的代码是我目前正在执行的操作,我很想听听我可以做的任何改进或解决问题的其他方法。
new = []
start = timeit.timeit()
for i, r in enumerate(self.records):
x = (y for y in self.records if y.compare_record_same_name(r))
if any(r in x for x in new):
continue
else:
new.append(x)
class Record():
def compare_record_same_name(self, other):
duration = abs(self.date_time - other.date_time)
duration = duration.total_seconds()
return (self.name == other.name and duration < TIME_SEPERATOR
and duration > 0)