У меня есть файлы, содержащие необработанные сигналы.Файлы начинаются с того, что первый столбец - «время», а второй - «сигнал».
Имеется около 8 миллионов строк из-за того, что промежуток времени составляет около 20 часов со временем с шагом 10 мс.
Я хочу извлечь определенные куски данных из файлов в разное время «запуска» и «остановки».
Мне удалось что-то сделать.Это мой код:
import csv
#Constructs arrays of length 500 ms from raw signals
def constructor(filename, new_file, start, stop, label):
with open(filename, 'rb') as fileRead:
reader = csv.reader(fileRead, delimiter=',')
for row in reader:
if float(row[0]) == float(start):
while float(row[0]) != float(stop):
array = []
for i in range(50):
array.append(row[1])
row = next(reader)
with open(new_file, 'ab') as fileWrite:
array.append(label)
writer = csv.writer(fileWrite)
writer.writerow(array)
else:
continue
constructor('SC4001E0-PSG_FPZ-CZ.csv', 'new.csv', 0, 1, 0)
constructor('SC4001E0-PSG_FPZ-CZ.csv', 'new.csv', 30630, 30750, 1)
Время начала и окончания указано в секундах.
0 в момент «0», 360 в момент «6 минут» и т. Д. И т. Д.
Я хочу просмотреть данные и сгруппировать их по эпохамполсекунды, отсюда и часть for i in range(50)
И запишите этот список в другой файл CSV.
Мой код «технически» работает.Если я запускаю свою программу, чтобы начать с начала = 0 и остановки = 0,5, из моего файла данных:
0 5.01685
0.01 -2.578755
0.02 1.359707
0.03 -2.391209
0.04 -5.204396
0.05 -7.454945
0.06 -8.298901
0.07 -6.892308
0.08 -3.704029
0.09 -0.984615
0.1 2.203663
0.11 2.016117
0.12 1.641026
0.13 -2.672527
0.14 -0.79707
0.15 1.359707
0.16 2.860073
0.17 -2.203663
0.18 0.515751
0.19 5.860806
0.2 -1.734799
0.21 -3.047619
0.22 2.860073
0.23 7.830037
0.24 2.953846
0.25 -0.984615
0.26 -1.922344
0.27 -6.704762
0.28 -7.548718
0.29 -4.829304
0.3 -12.612454
0.31 -9.23663
0.32 -12.331136
0.33 -8.298901
0.34 -16.36337
0.35 -21.145788
0.36 -23.677656
0.37 -21.23956
0.38 -20.208059
0.39 -23.771429
0.4 -26.115751
0.41 -25.646886
0.42 -26.115751
0.43 -26.678388
0.44 -22.8337
0.45 -22.458608
0.46 -21.520879
0.47 -16.644689
0.48 -16.082051
0.49 -11.393407
я получаю это:
5.01685 -2.578755 1.359707 -2.391209 -5.204396 -7.454945 -8.298901 -6.892308 -3.704029 -0.984615 2.203663 2.016117 1.641026 -2.672527 -0.79707 1.359707 2.860073 -2.203663 0.515751 5.860806 -1.734799 -3.047619 2.860073 7.830037 2.953846 -0.984615 -1.922344 -6.704762 -7.548718 -4.829304 -12.612454 -9.23663 -12.331136 -8.298901 -16.36337 -21.145788 -23.677656 -21.23956 -20.208059 -23.771429 -26.115751 -25.646886 -26.115751 -26.678388 -22.8337 -22.458608 -21.520879 -16.644689 -16.082051 -11.393407 0
Что именно то, что я хочу, НОиногда время «начала» и «остановки» может сильно различаться.Если я запускаю строку кода constructor('SC4001E0-PSG_FPZ-CZ.csv', 'new.csv', 30630, 30750, 1)
... Ничего не происходит.Это похоже на то, как если бы Python-скрипт запускался из-за того, что время запуска было так далеко.
Причина, по которой я запускаю функции в каскадном порядке так, как у меня, заключается в том, что все разные порции данных, которые мне нужныпеременные времена.Все эти порции данных имеют соответствующую метку.
Данные в диапазоне от 240 до 350 с могут быть меткой 2. Данные в диапазоне от 56000 до 62130 могут быть меткой 1 и т. Д. Я хочу, чтобы все эти списки или эпохи,с соответствующей меткой в новом файле csv.
Я понимаю, что с каждым запуском функции в такое большое время запуска это будет означать, что функция начинает выполнять избыточный процесс,необходимость заново открыть и перечитать файл данных с самого начала.
У кого-нибудь есть предложения?Кто-нибудь знает, почему сценарий останавливается при большом времени запуска?
Спасибо за ваше время.
РЕДАКТИРОВАТЬ: Я обнаружил свою ошибку.Это было 100% ошибка пользователя.Причина, по которой мой сценарий не извлекал строки при следующих значениях start
, заключалась в том, что там не было НИКАКИХ данных для начала.Мои файлы настолько велики, что после того, как Excel достиг своего предела, Excel отрубил оставшиеся данные из файла.
Помимо очень небольшого количества дополнений и изменений в моем коде, он отлично работает.Так что, если кто-то хочет использовать его в качестве справки, вот оно.