7.1 Основні операції

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

Основні операції з директоріями:

Створення директорії

Для створення нової директорії використовується функція os.mkdir().

Приклад:


import os

# Створення нової директорії
os.mkdir('new_directory')
print("Директорія 'new_directory' створена")

Створення кількох вкладених директорій

Для створення кількох вкладених директорій використовується функція os.makedirs().

Приклад:


import os

# Створення кількох вкладених директорій
os.makedirs('parent_directory/child_directory')
print("Вкладені директорії 'parent_directory/child_directory' створені")

Видалення директорії

Для видалення порожньої директорії використовується функція os.rmdir(). Для видалення директорії з вмістом використовується функція shutil.rmtree().

Приклад:


import os

# Видалення порожньої директорії
os.rmdir('new_directory')
print("Директорія 'new_directory' видалена")

Приклад видалення директорії з вмістом:


import shutil

# Видалення директорії з вмістом
shutil.rmtree('parent_directory')
print("Директорія 'parent_directory' та весь її вміст видалено")

Важливо! Ніколи не видаляй директорію зі всім вмістом. В одному з 10 випадків в твою програму затеснеться баг, і ти видалиш собі половину файлів на диску. Всі через це проходять. Ніколи так не роби.

Рекомендується перед видаленням директорії перевірити її існування за допомогою функції os.path.exists(). Це може запобігти помилкам, пов'язаним з видаленням неіснуючої директорії або неправильного шляху.

Приклад:


import os
import shutil

# Перевірка існування директорії перед видаленням
directory_path = 'parent_directory'
if os.path.exists(directory_path):
    shutil.rmtree(directory_path)
    print(f"Директорія '{directory_path}' та весь її вміст видалено")
else:
    print(f"Директорія '{directory_path}' не існує, видалення неможливе")

7.2 Копіювання директорій

Переміщення та перейменування директорії

Для переміщення або перейменування директорії використовується функція os.rename().


import os

# Створення директорії для прикладу
os.mkdir('original_directory')

# Перейменування директорії
os.rename('original_directory', 'renamed_directory')
print("Директорія 'original_directory' перейменована в 'renamed_directory'") 

Копіювання директорії

Для копіювання директорії використовується функція shutil.copytree(). Ця функція не тільки копіює вміст директорії, але й створює нову директорію в зазначеному шляху призначення.


import os
import shutil

# Створення директорії для прикладу
os.mkdir('source_directory')

# Копіювання директорії
shutil.copytree('source_directory', 'destination_directory')
print("Директорія 'source_directory' скопійована в 'destination_directory'")

7.3 Поточна директорія

До кожної запущеної програми прив'язане таке поняття, як «поточна робоча директорія». Зазвичай це директорія, в якій запущена програма і в якій вона шукає свої службові файли. Наприклад, всі файли, шляхи яких задані без імені каталогу, будуть шукатися в поточній директорії.

Отримання поточної робочої директорії

Для отримання поточної робочої директорії використовується функція os.getcwd().


import os

# Отримання поточної робочої директорії
current_directory = os.getcwd()
print(f"Поточна робоча директорія: {current_directory}")

Зміна поточної робочої директорії

Для зміни поточної робочої директорії використовується функція os.chdir().


import os

# Зміна поточної робочої директорії
os.chdir('new_directory')
print(f"Поточна робоча директорія змінена на: {os.getcwd()}")

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

Перевірка існування директорії

Для перевірки існування директорії використовується функція os.path.exists().


import os

# Перевірка існування директорії
directory_path = 'new_directory'
if os.path.exists(directory_path):
    print(f"Директорія '{directory_path}' існує")
else:
    print(f"Директорія '{directory_path}' не існує")

Отримання абсолютного шляху директорії

Для отримання абсолютного шляху використовується функція os.path.abspath().


import os

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

7.4 Вміст директорії

Отримання списку файлів і директорій

Для отримання списку файлів і директорій в зазначеній директорії використовується функція os.listdir().


import os

# Отримання списку файлів і директорій у поточній директорії
contents = os.listdir('.')
print(f"Вміст поточної директорії: {contents}")

Можна працювати з файлами і директоріями не як із списками шляхів, а як із більш складними об'єктами.

Отримання інформації про вміст директорії з використанням os.scandir()

Функція os.scandir() повертає ітератор, який видає об'єкти DirEntry для кожного запису в директорії. Ці об'єкти містять інформацію про файли і директорії, що робить їх використання більш ефективним в порівнянні з os.listdir(), особливо для великих каталогів.


import os

# Отримання інформації про вміст директорії
with os.scandir('.') as entries:
    for entry in entries:
        print(f"Ім'я: {entry.name}, Це директорія: {entry.is_dir()}, Це файл: {entry.is_file()}")