Форум сайта python.su
> Алгоритм: …
Ты еще чертёж сделай по ЕСПД. Если что это сарказм, чертёж мне не нужен
Похоже что твоя ошибка в том что ты пытаешься искать данные в CSV файле. Попробуй перегнать данные в БД или сразу в память (если её хватит). Должно помочь.
Отредактировано Rodegast (Июнь 27, 2024 14:02:49)
Офлайн
RodegastПамяти хватает, хотелось бы сделать это без БД.
Попробуй перегнать данные в БД или сразу в память (если её хватит)
data = pandas.read_csv("data.csv", delimiter=",")
RodegastЯ предполагаю, что я каждый раз вывожу данные в csv файл, операция записи в файл еще и через print очень медленная, наверное нужно как-то по-другому выводить. Сначала сформировать данные, а вывести один раз.
Похоже что твоя ошибка в том что ты пытаешься искать данные в CSV файле.
Отредактировано user555 (Июнь 27, 2024 19:00:23)
Офлайн
> Памяти хватает, хотелось бы сделать это без БД.
Тогда загрузи данные в список и ищи по нему.
> Разве data не в памяти содержится?
data это ссылка на объект который предоставляет доступ к данным. Где эти данные содержатся зависти от реализации этого объекта. Посмотри по диспетчеру задач сколько у тебя памяти расходуется, тогда всё ясно станет.
> наверное нужно как-то по-другому выводить
Для чтения / записи csv файлов есть модуль csv. нужно его использовать.
Офлайн
RodegastРасходуется в процессе выполнения - 760 Мб
Посмотри по диспетчеру задач сколько у тебя памяти расходуется, тогда всё ясно станет.
RodegastУ меня весьма поверхностные знания. Признаться это вообще моя первая программа на python.
Тогда загрузи данные в список и ищи по нему.
Отредактировано user555 (Июнь 27, 2024 19:48:01)
Офлайн
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), пока оно не измениться все последующие строки буду сравнивать с ним.
Онлайн
Алгоритм:
Так как количество строк известно, запускаю цикл I (for, счётчик цикла - номер строки).
1. Беру 1-ю строку (I=1). В первой строке значение port1=53023, значит из неё я извлекаю CWS_1 (размер буфер).
2. Беру 2-ю строку (I=2), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 2-й строкой и N-й (пока неизвестной).
2.1 Для I=2 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=1), пока оно не измениться все последующие строки буду сравнивать с ним.
2.2 Беру 3-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_3 (55).
2.3 Беру 4-ю строку: в ней значение port1=443, значит из неё я считаю seq4-seq2=49, CWS на данный момент 55. Проверяю условие seq4-seq2 <= CWS_3 . Условие выполняется. Продолжаю цикл N.
2.4 Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
2.5 Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq2=100, CWS на данный момент 60. Проверяю условие seq6-seq2 <= CWS_3. Условие не выполняется. Останавливаю цикл N для I=2.
2.6 Беру последнюю строку где условие выполнялось. Считаю разность времени между 4-й строкой и 2-й строкой, получаю значение 0.02, записываю в файл.
2.7 Возвращаюсь к циклу I.
3. Беру 3-ю строку (I=3). В 3-й строке значение port1=53023, значит из неё я извлекаю CWS_3 (60).
3.1 Беру 4-ю строку (I=4), в ней port1=443, для нее мне необходимо выполнить расчёт разности времени между 4-й строкой и N-й (пока неизвестной).
3.2 Для I=4 запускаю цикл N (while, счётчик цикла номер строки). Значение N от i+1 до неизвестного. Текущее значение CWS я получил ранее (в i=3), пока оно не измениться все последующие строки буду сравнивать с ним.
3.3 Беру 5-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_5 (60).
3.4 Беру 6-ю строку: в ней значение port1=443, значит из неё я считаю seq6-seq4=51, CWS на данный момент 60. Проверяю условие seq6-seq4 <= CWS_5 . Условие выполняется. Продолжаю цикл N.
3.5 Беру 7-ю строку: в ней значение port1=53023, значит из неё я извлекаю CWS_7 (70).
3.6 Беру 8-ю строку: в ней значение port1=443, значит из неё я считаю seq8-seq4=91, CWS на данный момент 70. Проверяю условия seq8-seq4 <= CWS_7. Условие не выполняется. Останавливаю цикл N для I=4.
3.7 Беру последнюю строку где условие выполнялось. Считаю разность времени между 6-й строкой и 4-й строкой, получаю значение 0.02, записываю в файл.
3.8 Возвращаюсь к циклу I.
Офлайн
py.user.nextПотому что значение буфер (CWS) увеличилось и стало 55 (в строке 2.2). 50 оно было ранее.
Почему значение CWS на данный момент равно 55, а не 50?
py.user.nextДа но в следующей строке оно изменяется.
Там взято значение 50 и говорится, что с этим значением будут последующие сравнения. Ни одного сравнения со значением 50 дальше в алгоритме нет. О чём тогда речь?
Отредактировано user555 (Июнь 28, 2024 19:25:33)
Офлайн
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 (Июнь 28, 2024 19:24:08)
Офлайн
Пронумеруй шаги алгоритма с первого по последний сквозной нумерацией. Не пунктами с подпунктами, а просто как 1, 2, …, последняя.
В таких шагах алгоритма
user555также указывай к какому шагу алгоритма (по его номеру) идёт переход (когда сделаешь сквозную нумерацию шагов алгоритма).
Возвращаюсь к циклу I.
user555Вот там, где происходит переключение на новое значение CWS (там несколько таких пунктов) напиши это ясно, что происходит переключение с такого-то значения на такое-то. Чтобы не надо было до этого догадываться “а вот там оно происходит или мне кажется, что оно там происходит?”. Ясно всё в коде должно быть, не должно быть двусмысленностей.
Потому что значение буфер (CWS) увеличилось и стало 55 (в строке 2.2). 50 оно было ранее
user555Не надо было это писать. У тебя и так каша в голове, мы сидим и как раз её и разгребаем (мы тебе мозги вправляем, у нас-то всё в порядке), так ты ещё и вторую написал для большей путаницы. Конечно, я не буду сидеть и это читать, потому что для этого надо сидеть и сравнивать каждую строчку из этого описания с каждой строчкой из алгоритма, а ты их (эти строки-шаги) даже не пронумеровал (чтобы их отыскивать быстро).
Давайте для общего понимания (как в ситуации с домами )
Отредактировано py.user.next (Июнь 29, 2024 05:33:58)
Онлайн
Входные данные:
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-й строкой
Отредактировано user555 (Июнь 30, 2024 01:49:13)
Офлайн