Відкриття та закриття файлів Python

Python підтримує безліч різних типів файлів, але умовно їх можна розділити на два вигляді: текстові і бінарні. Текстові файли - це наприклад файли з розширенням cvs, txt, html, загалом будь-які файли, які зберігають інформацію в текстовому вигляді. Бінарні файли - це зображення, аудіо і відеофайли і т. д. В залежності від типу файлу робота з ним може трохи відрізнятися.

При роботі з файлами необхідно дотримуватися деяку послідовність операцій:

  1. Відкриття файлу за допомогою методу open()
  2. Читання файлу за допомогою методу read () або запис у файл за допомогою методу write()
  3. Закриття файлу методом 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")