Файлы · 14 из 14
Только новое
Стас пишет сторожа: раз в минуту тот заглядывает в журнал и шлёт в чат то, что появилось с прошлого раза. Журнал весит несколько гигабайт, перечитывать его каждую минуту нельзя — сторож помнит, на каком байте остановился. Сервер может как раз дописывать строку, и недописанную отправлять рано. А ночью журнал ротируют, и файл вдруг становится короче, чем был.
Что сделать
Отдайте строки, появившиеся в журнале после запомненного места, и новое место — не перечитывая файл и не отдавая недописанное.
Что приходит
put— путь к журналу в UTF-8smeshchenie— на каком байте остановились в прошлый раз; с самого начала — 0
Что вернуть
Пару (новые строки без переводов строки, новое смещение в байтах).
Допишите функцию novye_stroki в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В журнале две законченные строки и начало третьей: "12:01 GET /\n12:02 GET /api\n12:03 GE". С нуля отдаются две строки, а новое смещение — 27, начало недописанной: в следующий раз чтение начнётся с неё.
with open("app.log", "w", encoding="utf-8", newline="") as f:
f.write("12:01 GET /\n12:02 GET /api\n12:03 GE")
novye_stroki("app.log", 0)
(['12:01 GET /', '12:02 GET /api'], 27)
Читайте файл с байта smeshchenie до конца. Отдавайте только законченные строки — после которых стоит перевод строки \n. Хвост без перевода строки ещё дописывается: его не отдавать, а новое смещение ставить на его начало.
Строка, кончавшаяся \r\n, отдаётся без \r. Пустая строка между двумя переводами — тоже строка: "".
Смещение считается в байтах, а не в буквах: кириллическая буква в UTF-8 — два байта.
Если файл короче smeshchenie — его ротировали, и читать надо с начала. Если файла нет — ([], 0). Новых законченных строк нет — пустой список и смещение, с которого читали.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.