Відкриття та закриття файлів Python
Python підтримує безліч різних типів файлів, але умовно їх можна розділити на два вигляді: текстові і бінарні. Текстові файли - це наприклад файли з розширенням cvs, txt, html, загалом будь-які файли, які зберігають інформацію в текстовому вигляді. Бінарні файли - це зображення, аудіо і відеофайли і т. д. В залежності від типу файлу робота з ним може трохи відрізнятися.
При роботі з файлами необхідно дотримуватися деяку послідовність операцій:
- Відкриття файлу за допомогою методу open()
- Читання файлу за допомогою методу read () або запис у файл за допомогою методу write()
- Закриття файлу методом close()
Відкриття та закриття файлу
Щоб почати роботу з файлом, його треба відкрити за допомогою функції open(), яка має наступне формальне визначення:
open(file, mode)
Перший параметр функції представляє шлях до файлу. Шлях файлу може бути абсолютним, тобто починатися з букви диска, наприклад, C://somedir/somefile.txt. Або може бути відносним, наприклад, somedir/somefile.txt - в цьому випадку пошук файлу буде йти щодо розташування запущеного скрипта Python.
Другий передається аргумент - mode встановлює режим відкриття файлу в залежності від того, що ми збираємося з ним робити. Існує 4 загальних режиму:
- r (Read). Файл відкривається для читання. Якщо файл не знайдений, то генерується виняток FileNotFoundError
- w (Write). Файл відкривається для запису. Якщо файл відсутній, то він створюється. Якщо подібний файл вже є, то він створюється заново, і відповідно старі дані в ньому стираються.
- a (Append). Файл відкривається для дозапису. Якщо файл відсутній, то він створюється. Якщо такий файл вже є, то дані записуються в його кінець.
- b (Binary). Використовується для роботи з бінарними файлами. Застосовується разом з іншими режимами - w або r.
Після завершення роботи з файлом його обов'язково потрібно закрити методом close(). Даний метод звільнить всі пов'язані з файлом використовувані ресурси.
Наприклад, відкриємо для запису текстовий файл "hello.txt":
myfile = open("hello.txt", "w")
myfile.close()
При відкритті файлу або в процесі роботи з ним ми можемо зіткнутися з різними винятками, наприклад, до нього немає доступу і т.д. В цьому випадку програма випаде помилку, а її виконання не дійде до виклику методу close, і відповідно файл не буде закритий.
В цьому випадку ми можемо обробляти винятки:
try:
somefile = open("hello.txt", "w")
try:
somefile.write("hello world")
except Exception as e:
print(e)
finally:
somefile.close()
except Exception as ex:
print(ex)
В даному випадку вся робота з файлом йде у вкладеному блоці try. І якщо раптом виникне якесь виключення, то в будь-якому випадку в блоці finally файл буде закритий.
Однак є і більш зручна конструкція - конструкція with:
with open (file, mode) as file_obj:
інструкція
Ця конструкція визначає для відкритого файлу змінну file_obj і виконує набір інструкцій. Після їх виконання файл автоматично закривається. Навіть якщо при виконанні інструкцій в блоці with виникнуть будь-які винятки, то файл все одно закривається.
Так, перепишемо попередній приклад:
with open("hello.txt", "w") as somefile:
somefile.write("hello world")