Операції введення-виведення, робота з файлами 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 і те як можна працювати з данними введеними користувачем.
Далі ми поговоримо про концепцію винятків.
Автор перекладу - Дмитро Юрченко.