Операції введення-виведення, робота з файлами Python

Python ua: Операції введення-виведення

Вступ

В майбутньому можуть виникнути ситуації, коли твоя програма повинна буде взаємодіяти з користувачем. Наприклад, тобі знадобиться отримати якісь дані від користувача і щось вивести у відповідь. Цього можна досягти використавши функції input() і print() відповідно.

Для друку на екран можна також скористатися різноманітними методами класу str. Наприклад, можна використати функцію rjust для виведення рядку який вирівнюється по правому краю екрана.

Інший поширений тип операцій введення-виведення це робота з файлами. Здатність створювати, читати і записувати в файли неодмінна риса багатьох програм.

 

 

Обробка даних від користувача

Паліндром, перевертень, рак літеральний, паліндромон (від грец. πάλιν — «назад, знов» та грец. δρóμος — «біг») — слово, словосполучення або віршований рядок, що однаково читається в обох напрямках (зліва направо та справа наліво).

        #!/usr/bin/python
        # user_input.py

        def reverse(text):
            return text[::-1]
        
        def is_palindrome(text):
            return text == reverse(text)

        something = input('Введіть текст: ')

        if (is_palindrome(something)):
            print("Так, це паліндром")
        else:
            print("Ні, це не паліндром")

Вивід:

    
        $ python user_input.py
        Введіть текст: sir
        Ні, це не паліндром

        $ python user_input.py
        Введіть текст: madam
        Так, це паліндром
        
        $ python user_input.py
        Введіть текст: racecar
        Так, це паліндром
    

Як це працює:

Ми використали можливість створювати зрізи для того щоб змінити порядок слідування елементів в рядку на протилежний. Ми вже бачили як можна створювати зрізи послідовностей використовуючи код на зразок seq[a:b]. Крім початкової і кінецої позиції зрізу можна також передати функції 3-й параметр який вказує на крок (к-ть елементів які функція занесе до зрізу за один раз) з яким буде створено зріз. Типово, крок дорівнює одиниці. Саме тому функція повертає нерозривну, безперервну частину тексту. Якщо значення кроку від’ємне число, то зріз послідовністі буде починатися з кінця.

Функція input() приймає значення рядкового типу і виводить його на екран. Потім вона чекає поки користувач не натисне клавішу Enter. Як тільки користувач натиснув Enter, функція поверне в програму те що він ввів.

Домашня робота:

Перевірка на те чи слово є паліндромом повинна ігнорувати знаки пунктуації, пробіли, і регістр символів. Наприклад, "Rise to vote, sir." також паліндром, але програма так не вважає. Ти можеш вдосконалити програму так щоб вона розпізнала що це паліндром?

 

Файли

Для роботи з файлами потрібно створити об’єкт класу file і скористатися методами read, write, readline для читання або запису. Здатність читати файл або записувати в нього дані залежить від режиму який ти вказав при відритті файлу. Після завершення роботи з файлом слід викликати для нього метод close для того щоб вказати Python що ми його вже не використовуємо.

Приклад:

{code class="brush: python; gutter:false;"}

        #!/usr/bin/python
        # Filename: using_file.py

        poem = '''\
            Programming is fun
            When the work is done
            if you wanna make your work also fun:
            use Python!
        '''

        f = open('poem.txt', 'w') # 'w' вказує на те що файл відкрито для запису
        f.write(poem) # записати текст до файлу
        f.close() # закрити файл

        f = open('poem.txt') # якщо режим не вказано, припускається що файл відкрито тільки для читання
        
        while True:
            line = f.readline() # читає рядок по одному за раз
            if len(line) == 0: # Нульова довжина вказує на кінець файлу (EOF). Якщо так, то
                break # вийти з циклу
            print(line, end='')

        f.close() # Закрити файл. Код виконається, тоді коли програма вийде з циклу вище

Вивід:

    
        $ python using_file.py
        Programming is fun
        When the work is done
        if you wanna make your work also fun:
            use Python!
    

Як це працює:

Спершу ми відкрили файл скориставшись функцією open, Як можна бачити з коду 1-м аргументом для цієї функції слугує ім’я файлу, 2-й аргумент — тип доступу або режим. Існує декілька режимів — читання ('r'), запис ('w'), додавання('a'). Також, можна вказати з яким типом файлу ми маємо справу. Бінарний файл ('b') чи текстовий ('t'). Насправді існує більше режимів і ти можеш дізнатися про них прочитавши довідку — help(open). Типово, функція open вважає що файл відкрито для читання і він є текстовим (це якщо режим не вказано).

В цьому прикладі ми відкрили файл для запису в як текстовий і далі використали метод write об’єкту типу file для запису. В кінці закрили файловий дескриптор.

Далі файл було відкрито знову, але цього разу для читання. Тип доступу ми не вказали, бо режим 'r' — це типовий режим для функції. Ми прочитали кожен рядок файлу скориставшись методом readline в циклі. Цей метод повертає рядок включно з символом нового рядка в кінці. Коли метод повертає порожній рядок, можна вважати що кінець файлу досягнуто. В такому разі відбувається вихід з циклу (break).

Типово, функція print() автоматично виводить на екран також і символ нового рядку, Але, сокільки, рядки прочитані з файлу вже містять такий символ, ми вказали функції не додавати його до виводу передавши їй порожній рядок як 2-й аргумент — end=''. В кінці ми закрили файл.

Тепер перевір вміст файлу poem.txt для того щоб переконатися чи там справді є текст.

 

Pickle

Python постачається з спеціальним модулем який називається Pickle. Він дозволяє вам зберегти будь-який Python-об’єкт у файлі і потім, отримати його назад.

Приклад:

        #!/usr/bin/python
        # Filename: pickling.py

        import pickle
        # назва файлу в якому буде зберігатися об’єкт
        shoplistfile = 'shoplist.data'
        # список покупок
        shoplist = ['apple', 'mango', 'carrot']

        # Запис в файл
        f = open(shoplistfile, 'wb')
        pickle.dump(shoplist, f) # скинути об’єкт в файл
        f.close()
        del shoplist # знищити змінну shoplist

        # Прочитати з файлового сховища
        f = open(shoplistfile, 'rb')
        storedlist = pickle.load(f) # завантажити об’єкт з файлу
        print(storedlist)

Як це працює:

Для того щоб зберегти об’єкт в файл спершу його потрібно відкрити як бінарний для запису і потім, викликати функцію dump з модуля pickle.

Потім ми отримали збережений об’єкт назад скориставшись функцією load з модулю pickle.

 

Підсумок

Ми обговорили роботу з файлами, функцію open а також функцію input і те як можна працювати з данними введеними користувачем.

Далі ми поговоримо про концепцію винятків.


Автор перекладу - Дмитро Юрченко.