6.1 Робота з файлами

Python надає багато вбудованих функцій і модулів для роботи з файлами та каталогами. Основні операції виконуються з використанням вбудованих модулів os, shutil та інших.

Три основні операції з файлами:

  • Копіювання
  • Переміщення
  • Видалення

Для їх виконання ідеально підходить модуль shutil.

Копіювання файлу


import shutil

shutil.copy('source.txt', 'destination.txt')
        

Переміщення файлу


import shutil

shutil.move('source.txt', 'destination.txt')
        

Видалення файлу


import os

os.remove('example.txt')
        

Простіше, ніж будь-коли.

6.2 Перевірка існування файлу

Дуже часто потрібно перевірити, чи існує певний файл чи ні. Для цього у модуля os є спеціальний метод — exists().

Перевірка існування файлу


import os

if os.path.exists('example.txt'):
    print("File exists")
else:
    print("File does not exist")
    # Якщо файл не існує, програма виконає дії, описані в блоці else.
    # Наприклад, можна вивести попередження, створити новий файл або вийти з програми.

        

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

6.3 Перевірка типу об'єкта: файл чи директорія

Дуже часто потрібно перевірити, чи є об'єкт файлом або директорією. Наприклад, якщо ти зчитуєш весь вміст директорії і файли потрібно обробити по одному, а директорії — по-іншому.

Для таких випадків є два спеціальних методи — isdir(), який перевіряє, чи є об'єкт директорією, та isfile(), який перевіряє, чи є об'єкт файлом.

Перевірка — це директорія чи ні


if os.path.isdir('example_directory'):
    print("Це директорія")
else:
    print("Це не директорія")
        

Перевірка — це файл чи ні


if os.path.isfile('example_file'):
    print("Це файл")
else:
    print("Це не файл")
        

Це дуже корисні функції, які ти будеш використовувати частіше, ніж думаєш. :)

6.4 Робота з шляхами

У модуля os є дочірній модуль os.path, який містить корисні функції для роботи з файлами та каталогами. Ось деякі з них:

Отримання розширення файлу

Функція splitext() ділить ім'я файлу на дві частини і повертає список з двох елементів: імені та розширення.


import os.path

# Отримання розширення файлу
file_path = 'example.txt'
file_extension = os.path.splitext(file_path)[1]
print(f"Розширення файлу: {file_extension}")
        

Отримання імені файлу без розширення


import os.path

# Отримання імені файлу без розширення
file_path = 'example.txt'
file_name = os.path.splitext(os.path.basename(file_path))[0]
print(f"Ім'я файлу без розширення: {file_name}")
        

Отримання імені файлу з шляху

Функція basename() повертає тільки ім'я файлу, відрізаючи весь шлях до нього.


import os.path

# Отримання імені файлу з шляху
file_path = '/path/to/example.txt'
file_name = os.path.basename(file_path)
print(f"Ім'я файлу: {file_name}")
        

Отримання директорії з шляху

Також легко отримати тільки директорію з імені файлу за допомогою функції dirname().


import os.path

# Отримання директорії з шляху
file_path = '/path/to/example.txt'
directory = os.path.dirname(file_path)
print(f"Директорія: {directory}")
        

Об'єднання шляхів

Якщо у тебе є окремо директорія і окремо ім'я файлу, ти можеш отримати повний шлях до цього файлу.


import os.path

# Об'єднання шляхів
directory = '/path/to'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Повний шлях: {full_path}")
        

6.5 Платформенно-незалежні шляхи

Під час роботи з шляхами важливо враховувати відмінності між операційними системами. Роздільники шляхів можуть відрізнятися, і код, який працює на одній платформі, може не працювати на іншій. Щоб уникнути проблем при перенесенні коду між різними операційними системами, використовуйте функції os.path.join(), os.path.abspath() та os.path.dirname(), які забезпечують сумісність з різними платформами.

Наприклад:


import os

# Об'єднання шляхів платформенно-незалежним способом
directory = 'some_directory'
file_name = 'example.txt'
full_path = os.path.join(directory, file_name)
print(f"Повний шлях: {full_path}")
        

Отримання абсолютного шляху

Якщо у тебе є шлях лише відносно поточного робочого каталогу, але ти хочеш перетворити його на абсолютний, для цього є функція abspath().


import os.path

# Отримання абсолютного шляху
relative_path = 'example.txt'
absolute_path = os.path.abspath(relative_path)
print(f"Абсолютний шлях: {absolute_path}")
        

Важливо! Завжди користуйтесь системними функціями при роботі з шляхами, так як ваш код може бути запущений на іншій операційній системі, де роздільник файлів не \, а /, або де заборонені «:» у шляхах або ще щось.