Главная страница
Навигация по странице:

  • Пример: сохраните как pickling.py):import pickle

  • Вывод: $ python3 яблоки, манго, морковь]Как это работает

  • Попытаемся считать что-либо от пользователя. НажмитеСtrl-D(илиCtrl+Zв и посмотрите, что произойдёт.>>>

  • Пример: сохраните как Введите что-нибудь --> )except Ну зачем вы сделали мне EOF)except Вы отменили операцию.)else

  • Пример: сохраните как Пользовательский класс исключения, length, atleast):Exception__init__(self)self length=length self Введите что-нибудь --> )if

  • 16.4. Вызов исключения A Byte of Python (Russian), Версия продолжение с предыдущей страницы)else :print(Не было исключений.)Вывод

  • Вывод: $ python3 Программировать веселоЕсли работа скучна,Чтобы придать ей весёлый тон -!! Вы отменили чтение файла.(Очистка: Закрытие файла)Как это работает

  • 16.7. Резюме Стандартная библиотека

  • Укус питона. Книга на вашем родном языке Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16 1


    Скачать 0.76 Mb.
    НазваниеКнига на вашем родном языке Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16 1
    АнкорУкус питона
    Дата09.11.2020
    Размер0.76 Mb.
    Формат файлаpdf
    Имя файлаAByteofPythonRussian-2.02.pdf
    ТипКнига
    #149233
    страница12 из 14
    1   ...   6   7   8   9   10   11   12   13   14
    Домашнее задание
    Проверка, является ли текст палиндромом должна также игнорировать знаки пунктуации, пробелы и регистр букв. Например, А роза упала на лапу Азора» также является палиндромом, но наша текущая программа так не считает. Попробуйте улучшить её так,
    чтобы она распознала этот палиндром.
    Подсказка: (не читайте)
    Воспользуйтесь кортежем (список всех знаков пунктуации можно найти здесь, содержащим все запрещённые символы, и примените тест на принадлежность, чтобы обнаружить символы, подлежащие удалению, те. forbidden = („!“, „?“, „.“, …).
    15.1. Ввод от пользователя

    A Byte of Python (Russian), Версия 2.02 15.2 Файлы
    Открывать и использовать файлы для чтения или записи можно путём создания объекта класса file
    , а читать/записывать в файл – при помощи его методов read
    ,
    readline или write соответственно. Возможность читать или записывать в файл зависит от режима,
    указанного при открытии файла. По окончании работы с файлом, нужно вызвать метод close
    1
    , чтобы указать Python, что файл больше не используется.
    Пример: сохраните как Программировать весело.
    Если работа скучна,
    Чтобы придать ей весёлый тон - используй Python!
    '''
    f
    =
    open
    (
    'poem.txt'
    ,
    'w'
    )
    # открываем для записи (writing)
    f write(poem)
    # записываем текст в файл close()
    # закрываем файл если не указан режим, по умолчанию подразумевается режим чтения ('r'eading)
    while True
    :
    line
    =
    f readline()
    if len
    (line)
    ==
    0
    :
    # Нулевая длина обозначает конец файла (EOF)
    break
    print
    (line, end
    =
    ''
    )
    f close()
    # закрываем файл
    Вывод:
    $ python3 Программировать весело.
    Если работа скучна,
    Чтобы придать ей весёлый тон - используй Как это работает:

    Сперва мы открываем файл при помощи встроенной функции open с указанием имени файла и режима, в котором мы хотим его открыть. Режим может быть для чтения (
    'r'
    ), записи (
    'w'
    ) или добавления (
    'a'
    )
    2
    . Можно также указать, в каком виде мы будем считывать, записывать или добавлять данные – англ. закрывать (прим.перев)
    2
    read, write и append соответственно (прим.перев.)
    15.2. Файлы

    A Byte of Python (Russian), Версия в текстовом (
    't'
    ) или бинарном (
    'b'
    ). На самом деле существует много других режимов, и даст вам их детальное описание. По умолчанию открывает файл как текст в режиме для чтения.
    В нашем примере мы сначала открываем файл в режиме записи текста и используем метод write файлового объекта для записи в файл, после чего закрываем файл при помощи Далее мы открываем тот же самый файл для чтения. В этом случае нет нужды указывать режим, так как режим чтения текстового файла применяется по умолчанию. Мы считываем файл построчно методом readline в цикле. Этот метод возвращает полную строку, включая символ перевода строки в конце.
    Когда же он возвращает пустую строку, это означает, что мы достигли конца файла, и мы прерываем цикл при помощи По умолчанию функция выводит текст, автоматически добавляя символ перевода строки в конце. Мы подавляем этот символ, указывая поскольку строки, считанные из файла, и без того оканчиваются символом перевода строки. И, наконец, мы закрываем файл с помощью Теперь проверяем содержимое файла poem.txt
    , чтобы убедиться, что программа действительно записала текст в него и считала из него Pickle
    Python предоставляет стандартный модуль с именем pickle
    3
    , при помощи которого можно сохранять любой объект Python в файле, а затем извлекать его обратно. Это называется
    длительным хранением объекта.
    Пример: сохраните как pickling.py
    ):
    import
    pickle
    # имя файла, в котором мы сохраним объект список покупок
    shoplist
    =
    [
    'яблоки'
    ,
    'манго'
    ,
    'морковь'
    ]
    # Запись в файл dump(shoplist, f)
    # помещаем объект в файл close()
    del
    shoplist
    # уничтожаем переменную продолжение наследующей странице – англ. мариновать, солить (прим.перев.)
    15.3. Pickle
    124

    A Byte of Python (Russian), Версия продолжение с предыдущей страницы Считываем из хранилища load(f)
    # загружаем объект из файла
    print
    (storedlist)
    Вывод:
    $ python3 яблоки, 'манго, 'морковь']
    Как это работает:
    Чтобы сохранить объект в файле, нам нужно сперва открыть файл с помощью open в режиме бинарной записи (
    'wb'
    ), после чего вызвать функцию dump из модуля pickle
    . Этот процесс называется консервацией (После этого мы извлекаем объект при помощи функции load из модуля pickle
    , которая возвращает объект. Этот процесс называется расконсервацией Резюме
    Мы обсудили разные типы ввода/вывода, а также работу с файлами и использование модуля Далее мы познакомимся с концепцией исключений. Резюме

    Исключения
    Исключения возникают тогда, когда в программе возникает некоторая исключительная
    ситуация. Например, к чему приведёт попытка чтения несуществующего файла Или если файл был случайно удалён, пока программа работала Такие ситуации обрабатываются при помощи исключений.
    Это касается и программ, содержащих недействительные команды. В этом случае поднимает руки и сообщает, что обнаружил ошибку Ошибки
    Рассмотрим простой вызов функции print
    . Что, если мы ошибочно напишем print как Обратите внимание на заглавную букву. В этом случае Python поднимает синтаксическую ошибку.
    >>>
    Print(
    'Привет, Мир (most recent call last):
    File
    "
    "
    , line
    1
    , in Привет, Мир name 'Print' is not Привет, Мир!'
    )
    Привет, Мир!
    Обратите внимание, что была поднята ошибка, а также указано место, где была обнаружена ошибка. Так в данном случае действует обработчик ошибок Исключения
    Попытаемся считать что-либо от пользователя. Нажмите
    Сtrl-D
    (или
    Ctrl+Z
    в и посмотрите, что произойдёт.
    >>>
    s
    =
    input
    (
    'Введите что-нибудь --> 'Введите что-нибудь -продолжение наследующей странице

    A Byte of Python (Russian), Версия продолжение с предыдущей страницы (most recent call last):
    File
    "
    "
    , line
    1
    , in Введите что-нибудь --> '
    )
    EOFError
    : EOF when reading a line
    Python поднимает ошибку с именем, что означает, что он обнаружил символ
    конца файла который вводится при помощи) там, где не ожидал Обработка исключений
    Обрабатывать исключения можно при помощи оператора try..except
    1
    . При этом все обычные команды помещаются внутрь блока, а все обработчики исключений – в except-блок.
    Пример: сохраните как Введите что-нибудь --> '
    )
    except Ну зачем вы сделали мне EOF?'
    )
    except Вы отменили операцию.'
    )
    else
    :
    print
    (
    'Вы ввели
    {0}
    '
    format(text))
    Вывод:
    $ python3 Введите что-нибудь -->
    # Нажмите Ну зачем вы сделали мне EOF?
    $ python3 Введите что-нибудь -->
    # Нажмите Вы отменили операцию python3 Введите что-нибудь --> без ошибок
    Вы ввели без ошибок
    Как это работает:
    Здесь мы поместили все команды, которые могут вызвать исключения ошибки, внутрь блока try
    , а затем поместили обработчики соответству-
    1
    try – англ. пытаться (прим.перев.)
    16.3. Обработка исключений

    A Byte of Python (Russian), Версия 2.02
    ющих ошибок/исключений в блок except
    . Выражение except может обрабатывать как одиночную ошибку или исключение, таки список ошибок исключений в скобках. Если не указано имя ошибки или исключения, обрабатываться будут все ошибки и исключения.
    Помните, что для каждого выражения try должно быть хотя бы одно соответствующее выражение except
    . Иначе какой смысл был бы в блоке Если ошибка или исключение не обработано, будет вызван обработчик Python по умолчанию, который останавливает выполнение программы и выводит на экран сообщение об ошибке. Выше мы уже видели это в действии.
    Можно также добавить пункт else к соответствующему блоку try..except
    . Этот пункт будет выполнен тогда, когда исключений не возникает.
    В следующем примере мы увидим, как можно получить объект исключения для дальнейшей работы с ним Вызов исключения
    Исключение можно поднять при помощи оператора raise
    2
    , передав ему имя ошибки исключения, а также объект исключения, который нужно выбросить.
    Вызываемая ошибка или исключение должна быть классом, который прямо или непрямо является производным от класса
    Exception
    Пример: сохраните как Пользовательский класс исключения, length, atleast):
    Exception
    __init__
    (
    self
    )
    self length
    =
    length self Введите что-нибудь --> '
    )
    if len
    (text)
    <
    3
    :
    raise
    ShortInputException(
    len
    (text),
    3
    )
    # Здесь может происходить обычная работа Ну зачем вы сделали мне EOF?'
    )
    except
    ShortInputException
    as
    ex:
    print
    (
    'ShortInputException: Длина введённой строки -ожидалось, как минимум length, ex продолжение наследующей странице – англ. поднимать (прим.перев.)
    16.4. Вызов исключения

    A Byte of Python (Russian), Версия продолжение с предыдущей страницы)
    else
    :
    print
    (
    'Не было исключений.'
    )
    Вывод:
    $ python3 Введите что-нибудь --> а Длина введённой строки -- 1; ожидалось, как минимум, 3
    $ python3 Введите что-нибудь --> абв
    Не было исключений.
    Как это работает:
    Здесь мы создаём наш собственный тип исключения. Этот новый тип исключения называется. Он содержит два поля, хранящее длину введённого текста, и atleast
    , указывающее, какую минимальную длину текста ожидала программа.
    В пункте except мы указываем класс ошибки, который будет сохранён как
    3
    переменная ex
    , содержащая соответствующий объект ошибки/исключения. Это аналогично параметрами аргументам при вызове функции. Внутри этого пункта except мы используем поля length и объекта исключения для вывода необходимых сообщений пользователю. Представим, что в программе происходит чтение файла и необходимо убедиться, что объект файла был корректно закрыт и что не возникло никакого исключения. Этого можно достичь с применением блока Сохраните как finally.py
    :
    import
    time
    try
    :
    f
    =
    open
    (
    'poem.txt'
    )
    while True
    :
    # наш обычный способ читать файлы readline()
    if продолжение наследующей странице – англ. как (прим.перев.)
    16.5. Try .. Finally
    129

    A Byte of Python (Russian), Версия продолжение с предыдущей страницы, end
    =
    ''
    )
    time sleep(
    2
    )
    # Пусть подождёт некоторое время
    KeyboardInterrupt
    :
    print
    (
    '!! Вы отменили чтение файла Очистка Закрытие файла)'
    )
    Вывод:
    $ python3 Программировать весело
    Если работа скучна,
    Чтобы придать ей весёлый тон -
    !! Вы отменили чтение файла.
    (Очистка: Закрытие файла)
    Как это работает:
    Здесь мы производим обычные операции чтения из файла, нов данном случае добавляем двухсекундный сон после вывода каждой строки при помощи функции time.sleep
    , чтобы программа выполнялась медленно (ведь Python очень быстр от природы. Вовремя выполнения программы нажмите чтобы прервать/отменить выполнение программы.
    Пронаблюдайте, как при этом выдаётся исключение, и программа выходит. Однако, прежде чем программа выйдет, выполняется пункт finally
    , и файловый объект будет всегда закрыт Оператор Типичной схемой является запрос некоторого ресурса в блоке try с последующим освобождением этого ресурса в блоке finally
    . Для того, чтобы сделать это более «чисто»,
    существует оператор Сохраните как using_with.py
    :
    with open
    (
    "poem.txt"
    )
    as
    f:
    for
    line
    in
    f:
    print
    (line, end
    =
    ''
    )
    4
    with – англ. с (прим.перев.)
    16.6. Оператор with
    130

    A Byte of Python (Russian), Версия Как это работает:

    Вывод должен быть таким же, как ив предыдущем примере. Разница лишь в том, что здесь мы используем функцию open с оператором with
    – этим мы оставляем автоматическое закрытие файла под ответственность with За кулисами происходит следующее. Существует некий протокол, используемый оператором with
    . Он считывает объект, возвращаемый оператором open
    Назовём его в данном случае Перед запуском блока кода, содержащегося в нм, оператор всегда вызывает функцию thefile.__enter__
    , а также всегда вызывает после завершения выполнения этого блока кода.
    Так что код, который мы бы написали в блоке finally
    , будет автоматически обработан методом. Это избавляет нас от необходимости повторно в явном виде указывать операторы Более обширное рассмотрение этой темы выходит за рамки настоящей книги,
    поэтому для более исчерпывающего объяснения см 343
    16.7 Резюме
    Мы обсудили использование операторов try..except и. Мы также увидели, как создавать наши собственные типы исключений и каких вызывать.
    Далее мы ознакомимся со стандартной библиотекой Python.
    16.7. Резюме
    Стандартная библиотека
    Стандартная библиотека Python содержит огромное количество полезных модулей и является частью стандартного комплекта поставки Python. Ознакомиться со стандартной библиотекой Python очень важно, так как множество задач можно решить очень быстро,
    если вы знакомы с возможностями этих библиотек.
    Рассмотрим некоторые наиболее часто используемые модули этой библиотеки. Детальное описание всех модулей стандартной библиотеки Python можно найти в разделе документации, входящей в комплект поставки Давайте изучим несколько полезных модулей.
    Примечание
    Если темы в настоящей главе покажутся вам слишком сложными, вы можете её пропустить. Однако я настоятельно рекомендую вернуться к этой главе, когда выбудете чувствовать себя более уверенно с Python.
    17.1 Модуль Модуль sys содержит функциональность, характерную для системы. Так мы видели, что список sys.argv содержит аргументы командной строки.
    Предположим, нам нужно узнать версию используемой команды Python стем, чтобы, к примеру, убедиться в том, что мы используем как минимум версию 3. Модуль sys предоставляет такую возможность version_info
    (3, 0, 0, 'beta', 2)
    >>>
    sys version_info[
    0
    ]
    >=
    3
    True
    132

    A Byte of Python (Russian), Версия Как это работает:
    Модуль sys содержит кортеж version_info
    , который хранит информацию о версии. Первый элемент этого кортежа обозначает старшую версию. Мы можем использовать его, например, для того, чтобы убедиться, что программа будет выполняться только в Python Сохраните как versioncheck.py
    :
    import
    sys
    ,
    warnings
    if
    sys version_info[
    0
    ]
    <
    3
    :
    warnings Для выполнения этой программы необходима как минимум
    \
    версия Python Нормальное продолжение'
    )
    Вывод:
    $ python2.7 versioncheck.py versioncheck.py:6: Для выполнения этой программы необходима как минимум

    ,

    версия Python 3.0
    RuntimeWarning)
    $ python3 Нормальное продолжение
    Как это работает:
    Мы используем один из модулей стандартной библиотеки, который называется и служит для отображения предупреждений пользователю. Если версия Python менее 3, мы показываем соответствующее предупреждение Модуль Представьте ситуацию, когда необходимо сохранить некоторые отладочные или другие важные сообщения где-нибудь, чтобы иметь возможность позже проверить, отработала ли программа, как ожидалось. Как мы сохраним где-нибудь» эти сообщения Сделать это можно при помощи модуля Сохраните как use_logging.py
    :
    import
    os
    ,
    platform
    ,
    logging
    if
    platform platform()
    startswith(
    'Windows'
    ):
    logging_file
    =
    os path join(os getenv(
    'HOMEDRIVE'
    ), продолжение наследующей странице. Модуль logging
    133

    A Byte of Python (Russian), Версия продолжение с предыдущей страницы getenv(
    'HOMEPATH'
    ), \
    'test.log'
    )
    else
    :
    logging_file
    =
    os path join(os Сохраняем лог в, logging_file)
    logging basicConfig(
    level
    =
    logging
    DEBUG,
    format
    =
    '
    %(asctime)s
    :
    %(levelname)s
    :
    %(message)s
    '
    ,
    filename
    =
    logging_file,
    filemode
    =
    'w'
    ,
    )
    logging Начало программы info(
    "Какие-то действия Программа умирает"
    )
    Вывод:
    $ python3 Сохраняем лог в Если открыть файл test.log
    , он будет выглядеть примерно так 16
    :
    52
    :
    41
    ,
    457
    : DEBUG : Начало программы 16
    :
    52
    :
    41
    ,
    474
    : INFO : Какие- то действия 16
    :
    52
    :
    41
    ,
    475
    : WARNING : Программа умирает
    Как это работает:
    Мы использовали три модуля из стандартной библиотеки модуль os для взаимодействия с операционной системой, модуль platform для получения информации о платформе (те. операционной системе) и модуль logging для сохранения лога
    1
    Прежде всего, при помощи строки, возвращаемой функцией мы проверяем, какая операционная система используется (для более подробной информации см platform; help(platform)
    ). Если это Windows, то мы определяем диск, содержащий домашний каталог, путь к домашнему каталогу на нём и имя файла, в котором хотим сохранить информацию. Сложив все эти три части, мы получаем полный путь к файлу.
    Для других платформ нам нужно знать только путь к домашнему каталогу пользователя, и мы получим полный путь к файлу – англ. журнал, вести журнал (прим.перев.)
    17.2. Модуль logging
    134

    A Byte of Python (Russian), Версия При помощи функции мы объединяем три части пути к файлу вместе. Мы используем эту функцию вместо простого объединения строк для того, чтобы гарантировать, что полный путь к файлу записан в формате, ожидаемом операционной системой.
    Далее мы конфигурируем модуль logging таким образом, чтобы он записывал все сообщения в определённом формате в указанный файл.
    Наконец, мы можем выводить сообщения, предназначенные для отладки, информирования, предупреждения и даже критические сообщения. После выполнения программы можно просмотреть этот файл и узнать, что происходило в программе, хотя пользователю, запустившему программу, ничего не было показано Серия Модуль недели»
    В стандартной библиотеке можно найти ещё много полезного. Например,
    отладка
    ,
    обра- ботка параметров командной строки
    ,
    регулярные выражения итак далее.
    Лучший способ дальнейшего изучения стандартной библиотеки – читать замечательную серию Дуга Хелмана
    «Модуль недели»
    или официальную документацию Python
    17.4 Резюме
    Мы изучили лишь некоторые возможности некоторых модулей стандартной библиотеки. Я настоятельно рекомендую просмотреть документацию по стандартной библиотеке, чтобы увидеть все доступные модули.
    Далее мы обратимся к некоторым аспектам, которые сделают вашу экскурсию поболее «завершённой».
    1   ...   6   7   8   9   10   11   12   13   14


    написать администратору сайта