Сценарий постраничного вывода

scenarij postranichnogo vyvoda Системные инструменты

Функция help, с которой мы только что познакомились, также не обладает достаточной гибкостью при отображении информации. Хотя она и пытается в некоторых ситуациях обеспечить постраничный вывод, тем не менее на некоторых компьютерах — из тех, на которых мне приходилось работать, — она неточно выбирает размер страницы. Кроме того, она вообще не обеспечивает постраничный просмотр в графическом интерфейсе IDLE; вместо этого предлагается использовать полосу прокрутки, что весьма неудобно на больших мониторах. Когда мне требуется получить более полный контроль над тем, как функция help будет выводить текст, я обычно использую свой собственный вспомогательный сценарий, представленный в примере 2.1.

Пример 2.1. PP4E\System\more.py

разбивает строку или текстовый файл на страницы для интерактивного просмотра

def more(text, numlines=15):

lines = text.splitlines() # подобно split(‘\n’) но без ‘’ в конце

while lines:

chunk = lines[:numlines] lines = lines[numlines:] for line in chunk: print(line) if lines and input(‘More?’) not in [‘y’, ‘Y’]: break

if __name__ == ‘__main__’:

import sys # если запускается как сценарий

more(open(sys.argv[1]).read(), 10) # отобразить постранично содержимое

# файла, указанного в командной строке

Главной в этом файле является функция more, и если вы обладаете достаточными знаниями языка Python, чтобы читать эту книгу, вы без труда поймете ее. Она просто разбивает строку по символам перевода строки, а затем извлекается срез и выводится сразу несколько строк (по умолчанию 15), чтобы избежать прокрутки экрана. Выражение извлечения среза lines[:15] вернет первые 15 элементов списка, a выражение lines[15:] — последние. Чтобы изменить размер страницы, передайте требуемое число строк в аргументе numlines (например, в последней строке примера 2.1 в аргументе numlines функции more передается число 10).

Вызов строкового метода splitlines, используемый в этом сценарии, возвращает список подстрок, полученный в результате разбиения исходной строки по символам перевода строки (например, [“line”, “line”,…]). Альтернативный метод split позволяет получить похожий результат, но в последнем элементе массива он возвращает пустую строку, если исходная строка заканчивается символом \n:

>>> line = aaa\nbbb\nccc\n

>>> line.split(‘\n’) [‘aaa’, ‘bbb’, ‘ccc’, ‘’]

>>> line.splitlines() [‘aaa’, ‘bbb’, ‘ccc’]

Как будет показано далее в главе 4, символом конца строки в сценариях на языке Python всегда является \n (обозначающий байт с числовым значением 10), вне зависимости от платформы. (Если вы еще не знаете, почему это имеет значение, — символы DOS \r отбрасываются при чтении.)

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий