Ты еще чертёж сделай по ЕСПД. Если что это сарказм, чертёж мне не нужен 
Похоже что твоя ошибка в том что ты пытаешься искать данные в CSV файле. Попробуй перегнать данные в БД или сразу в память (если её хватит). Должно помочь.
Ты еще чертёж сделай по ЕСПД. Если что это сарказм, чертёж мне не нужен 
RodegastПамяти хватает, хотелось бы сделать это без БД.
Попробуй перегнать данные в БД или сразу в память (если её хватит)
data = pandas.read_csv("data.csv", delimiter=",")
RodegastЯ предполагаю, что я каждый раз вывожу данные в csv файл, операция записи в файл еще и через print очень медленная, наверное нужно как-то по-другому выводить. Сначала сформировать данные, а вывести один раз.
Похоже что твоя ошибка в том что ты пытаешься искать данные в CSV файле.
RodegastРасходуется в процессе выполнения - 760 Мб
Посмотри по диспетчеру задач сколько у тебя памяти расходуется, тогда всё ясно станет.
RodegastУ меня весьма поверхностные знания. Признаться это вообще моя первая программа на python.
Тогда загрузи данные в список и ищи по нему.
user555Дохожу досюда в этом описании алгоритма
Входные данные:Выходные данные:No. Time port1 Seq CWS
1 0.01 53023 - 50
2 0.02 443 0 -
3 0.03 53023 - 55
4 0.04 443 49 -
5 0.05 53023 - 60
6 0.06 443 100 -
7 0.07 53023 - 70
8 0.08 443 140 -
9 0.09 53023 - 100
10 0.10 53023 - 100
11 0.11 443 210 -
12 0.12 443 240 -
13 0.13 443 270 -
14 0.14 53023 - 105
15 0.15 443 300 -
16 0.16 53023 - 150
17 0.17 443 400 -
18 0.18 443 550 -
19 0.19 53023 - 160
20 0.20 443 650 -
21 0.21 443 670 -
22 0.22 443 700 -
23 0.23 53023 - 170
24 0.24 443 800 -
25 0.25 443 850 -
26 0.26 53023 - 100
27 0.27 443 900 -
28 0.28 443 920 -
29 0.29 53023 - 100
30 0.30 443 940 -Алгоритм:0.02 # значение времени для 2-й строки - разность времени между 4-й строкой и 2-й строкой
0.02 # значение времени для 4-й строки - разность времени между 6-й строкой и 4-й строкой
0.02 # значение времени для 6-й строки - разность времени между 8-й строкой и 6-й строкой
0.04 # значение времени для 8-й строки - разность времени между 12-й строкой и 8-й строкой
0.04 # значение времени для 11-й строки - разность времени между 15-й строкой и 11-й строкой
0.03 # значение времени для 12-й строки - разность времени между 15-й строкой и 12-й строкой
0.04 # значение времени для 13-й строки - разность времени между 17-й строкой и 13-й строкой
0.02 # значение времени для 15-й строки - разность времени между 17-й строкой и 15-й строкой
0.01 # значение времени для 17-й строки - разность времени между 18-й строкой и 17-й строкой
0.04 # значение времени для 18-й строки - разность времени между 22-й строкой и 18-й строкой
0.04 # значение времени для 20-й строки - разность времени между 24-й строкой и 20-й строкой
0.03 # значение времени для 21-й строки - разность времени между 24-й строкой и 21-й строкой
0.03 # значение времени для 22-й строки - разность времени между 25-й строкой и 22-й строкой
0.03 # значение времени для 24-й строки - разность времени между 27-й строкой и 24-й строкой
0.05 # значение времени для 25-й строки - разность времени между 30-й строкой (так как она последняя) и 25-й строкой
0.03 # значение времени для 27-й строки - разность времени между 30-й строкой (так как она последняя) и 27-й строкой
0.02 # значение времени для 28-й строки - разность времени между 30-й строкой (так как она последняя) и 28-й строкой
0 # значение времени для 30-й строки - разность времени между 30-й строкой и 30-й строкой.
Так как количество строк известно, запускаю цикл I (for, счётчик цикла - номер строки).
Беру 1-ю строку (I=1). В первой строке значение port1=53023, значит из неё я извлекаю CWS_1 (размер буфер).
Беру 2-ю строку (I=2), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 2-й строкой и N-й (пока неизвестной).
Для I=2 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=1), пока оно не измениться все последующие строки буду сравнивать с ним.
Беру 3-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_3 (55).
Беру 4-ю строку: в ней значение port1=443, значит из неё я считаю seq4-seq2=49, CWS на данный момент 55. Проверяю условие seq4-seq2 <= CWS_3 . Условие выполняется. Продолжаю цикл N.
Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq2=100, CWS на данный момент 60. Проверяю условие seq6-seq2 <= CWS_3. Условие не выполняется. Останавливаю цикл N для I=2.
Беру последнюю строку где условие выполнялось. Считаю разность времени между 4-й строкой и 2-й строкой, получаю значение 0.02, записываю в файл.
Возвращаюсь к циклу I.
Беру 3-ю строку (I=3). В 3-й строке значение port1=53023, значит из неё я извлекаю CWS_3 (60).
Беру 4-ю строку (I=4), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 4-й строкой и N-й (пока неизвестной).
Для I=4 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=3), пока оно не измениться все последующие строки буду сравнивать с ним.
Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq4=51, CWS на данный момент 60. Проверяю условие seq6-seq4 <= CWS_5 . Условие выполняется. Продолжаю цикл N.
Беру 7-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_7 (70).
Беру 8-ю строку: в ней значение port1=443, значит из неё я считаю seq8-seq4=91, CWS на данный момент 70. Проверяю условия seq8-seq4 <= CWS_7. Условие не выполняется. Останавливаю цикл N для I=4.
Беру последнюю строку где условие выполнялось. Считаю разность времени между 6-й строкой и 4-й строкой, получаю значение 0.02, записываю в файл.
Возвращаюсь к циклу I.
user555Почему значение CWS на данный момент равно 55, а не 50?
Беру 3-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_3 (55).
Беру 4-ю строку: в ней значение port1=443, значит из неё я считаю seq4-seq2=49, CWS на данный момент 55. Проверяю условие seq4-seq2 <= CWS_3 . Условие выполняется. Продолжаю цикл N.
user555Там взято значение 50 и говорится, что с этим значением будут последующие сравнения. Ни одного сравнения со значением 50 дальше в алгоритме нет. О чём тогда речь?
Для I=2 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=1), пока оно не измениться все последующие строки буду сравнивать с ним.
py.user.nextПотому что значение буфер (CWS) увеличилось и стало 55 (в строке 2.2). 50 оно было ранее.
Почему значение CWS на данный момент равно 55, а не 50?
py.user.nextДа но в следующей строке оно изменяется.
Там взято значение 50 и говорится, что с этим значением будут последующие сравнения. Ни одного сравнения со значением 50 дальше в алгоритме нет. О чём тогда речь?


) представим, что Вы крановщик и в порту загружаете судно. Рядом с Вам стоят представители производителя судна и по его поведению говорят Вам сколько оно Вмещает груза (CWS). И с того момента как они говорят, это становиться характеристикой судна.py.user.nextЕго вообще можно посмотреть и задать в самом начале. Я собственно в коде так и сделал. Но это характерно только для первых строк (1-й или 2-й) дальше оно всегда будет присутствовать. Можно вообще его поставить максимально возможным (по специфике обрабатываемых данных), потом оно скорректируется (измениться в меньшую сторону).
Возможно, у тебя сдвиг какой-то этих значений CWS и ты первое значение просто потерял, хотя оно должно проверяться. А если оно проверяться не должно, то это должно быть явно видно.
No. Time port1 Seq CWS 1 0.01 443 0 - 2 0.02 443 5 - 3 0.03 53023 - 55 4 0.04 443 49 - 5 0.05 53023 - 60 6 0.06 443 100 - 7 0.07 53023 - 70
user555также указывай к какому шагу алгоритма (по его номеру) идёт переход (когда сделаешь сквозную нумерацию шагов алгоритма).
Возвращаюсь к циклу I.
user555Вот там, где происходит переключение на новое значение CWS (там несколько таких пунктов) напиши это ясно, что происходит переключение с такого-то значения на такое-то. Чтобы не надо было до этого догадываться “а вот там оно происходит или мне кажется, что оно там происходит?”. Ясно всё в коде должно быть, не должно быть двусмысленностей.
Потому что значение буфер (CWS) увеличилось и стало 55 (в строке 2.2). 50 оно было ранее
user555Не надо было это писать. У тебя и так каша в голове, мы сидим и как раз её и разгребаем (мы тебе мозги вправляем, у нас-то всё в порядке), так ты ещё и вторую написал для большей путаницы. Конечно, я не буду сидеть и это читать, потому что для этого надо сидеть и сравнивать каждую строчку из этого описания с каждой строчкой из алгоритма, а ты их (эти строки-шаги) даже не пронумеровал (чтобы их отыскивать быстро).
Давайте для общего понимания (как в ситуации с домами )
No. Time port1 Seq CWS 1 0.01 53023 - 50 2 0.02 443 0 - 3 0.03 53023 - 55 4 0.04 443 49 - 5 0.05 53023 - 60 6 0.06 443 100 - 7 0.07 53023 - 70 8 0.08 443 140 - 9 0.09 53023 - 100 10 0.10 53023 - 100 11 0.11 443 210 - 12 0.12 443 240 - 13 0.13 443 270 - 14 0.14 53023 - 105 15 0.15 443 300 - 16 0.16 53023 - 150 17 0.17 443 400 - 18 0.18 443 550 - 19 0.19 53023 - 160 20 0.20 443 650 - 21 0.21 443 670 - 22 0.22 443 700 - 23 0.23 53023 - 170 24 0.24 443 800 - 25 0.25 443 850 - 26 0.26 53023 - 100 27 0.27 443 900 - 28 0.28 443 920 - 29 0.29 53023 - 100 30 0.30 443 940 -
py.user.next
Так что
1) пронумеруй шаги алгоритма правильно, чтобы разные шаги алгоритма не сливались в один шаг алгоритма, чтобы не сидеть и не гадать “там два шага или один шаг? или это просто два предложения в одном шаге?”
2) внеси все ясности в пунктах с изменением одного значения CWS на другое, чтобы тоже не догадываться “оно поменялось или мне показалось это?”
3) добавь в местах перехода к шагам ссылки на номера этих шагов в пронумерованном алгоритме
0.02 # для 02-й строки - разность Time между 04-й строкой и 02-й строкой 0.02 # для 04-й строки - разность Time между 06-й строкой и 04-й строкой 0.02 # для 06-й строки - разность Time между 08-й строкой и 06-й строкой 0.04 # для 08-й строки - разность Time между 12-й строкой и 08-й строкой 0.04 # для 11-й строки - разность Time между 15-й строкой и 11-й строкой 0.03 # для 12-й строки - разность Time между 15-й строкой и 12-й строкой 0.04 # для 13-й строки - разность Time между 17-й строкой и 13-й строкой 0.02 # для 15-й строки - разность Time между 17-й строкой и 15-й строкой 0.01 # для 17-й строки - разность Time между 18-й строкой и 17-й строкой 0.04 # для 18-й строки - разность Time между 22-й строкой и 18-й строкой 0.04 # для 20-й строки - разность Time между 24-й строкой и 20-й строкой 0.03 # для 21-й строки - разность Time между 24-й строкой и 21-й строкой 0.03 # для 22-й строки - разность Time между 25-й строкой и 22-й строкой 0.03 # для 24-й строки - разность Time между 27-й строкой и 24-й строкой 0.05 # для 25-й строки - разность Time между 30-й строкой и 25-й строкой 0.03 # для 27-й строки - разность Time между 30-й строкой и 27-й строкой 0.02 # для 28-й строки - разность Time между 30-й строкой и 28-й строкой 0.00 # для 30-й строки - разность Time между 30-й строкой и 30-й строкой