У меня есть список из ~ 27.000 объектов. Каждый объект представляет собой строку из файла, где каждая строка является одной записью измерения от какого-либо инструмента.
Наиболее важные аспекты объекта:
Название инструмента: Int (49099, 89, ..)
Название станции: Строка (K-900, MK-45, ..)
Время: объект Datetime (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)