J. Хвост

В семействе операционных систем Linux существует одна прекрасная консольная утилита — tail. Она предназначена для случаев, когда нам не нужно читать весь файл, а достаточно просмотреть только несколько последних строк.

Напишите аналог этой утилиты.

Формат ввода

Пользователь вводит имя файла (F), а затем количество строк (N), которые он хочет увидеть.

Формат вывода

Выведите N последних строк файла F.

Пример

Ввод

# Пользовательский ввод:
some_file.txt
2

# Содержимое файла some_file.txt
1 строка
2 строка
3 строка
4 строка
5 строка

Вывод

4 строка
5 строка

Решение

Если вспомнить, что можно воспользоваться срезами, то задача решается элементарно.

Считываем файл любым удобным для нас способом и построчно помещаем его в список. С помощью среза обираем последние N строчек (последние N элементов) и выводим их.

Посмотреть код

Решение

Python
file_name = input().strip()
lines = int(input())

with open(file_name, encoding='UTF-8') as file:
    data = [string for string in file.read().split('\n') if string]
    # или так 
    # data = file.read().rstrip().split('\n')

print('\n'.join(data[-lines:]))

Решение

Python
file_name = input()
lines = int(input())

data = []
with open(file_name) as file:
    for string in file:
        data.append(string)
for string in data[-lines:]:
    print(string.strip())
Подписаться
Уведомить о
guest
6 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
nmalkam
12.12.2023 06:05

скажите, пожалуйста, возможно ли написать кд для следующего способа решения??

я не хочу сохранять все строки в список

могу ли я посчитать количество строк?
могу ли я начать вывод строки в нужны момент?

я попытался сделать следующее:
with open(file_in, ‘r’, encoding=”UTF-8″) as file_in:
line_count = sum(1 for line in file_in)
for line in file_in.readlines():
lines.append(line.strip())
Как я понял второй раз по файлу второй цикл for не стал проходить.
Я пока что что не гуглил способ решения задачи
Скажите, пожалуйста, имеет ли смысл искать ответ?

nmalkam
Ответить на  Сергей Клочко
13.12.2023 10:30

спасибо большое))
и за объяснение
и за варианты
и за продвинутый

тяжело увидеть различие на таких примерах, но теперь есть знание об алгоритме

chudo
chudo
20.11.2024 17:09

Привел такое решение. Причем в PyCharm выводит как надо: 4 строка \n 5 строка, а в решении Яндекса только: 5 строка. не могли бы прокомментировать в чем ошибка. и попутный вопрос: считывание из файла строк в генератор делается только для того, чтобы не перегружать память?

with open(input(), encoding=“UTF-8”as file_in:
    lines = file_in.read().split(‘\n’)

print(*lines[-int(input()):], sep=‘\n’)

chudo
chudo
Ответить на  Сергей Клочко
20.11.2024 17:39

Да, я тоже в процессе рассуждения (после опубликованного комментария) пришла к тому, что дело в пустой строке. Спасибо за оперативный ответ!