Меню Закрити

Команди для роботи із файловою системою в Python, які варто знати

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

Матеріал стане в пригоді як початківцям, так і програмістам, які вже програмують на Python.
Ми розкажемо про 10 команд з os та shutil, які автоматизують роботу із файловою системою.

Список команд наводимо в такому форматі:

код Python – опис – еквівалентна команда в терміналі(macOS)

Коротко про найголовніше

Команди для одержання інформації

  • os.getcwd() – одержати поточний шлях робочого каталогу як рядокpwd
  • os.listdir()– одержати вміст поточного робочого каталогу як список рядків –ls
  • os.walk("початкова_директорія") – повертає генератор із назвою та інформацією про шлях для каталогів і файлів у поточному каталозі та в усіх підкаталогах – немає точного короткого еквівалента CLI, але ls -R дає імена підкаталогів і назви файлів у підкаталогах.

Команди, що вносять зміни до файлової системи

  • os.chdir("абсолютний_або_відносний_шлях") – змінити поточний робочий каталог – cd
  • os.path.join() – перетворює вхідні параметри на шлях відповідно до вимог ОС – немає CLI-еквівалента.
  • os.makedirs("шлях")  – створити каталог – mkdir -p
  • shutil.copy2("шлях_звідки_копіювати", "шлях_куди_копіювати") – скопіювати файл або каталог – cp
  • shutil.move("шлях_звідки_перемістити", "шлях_куди_перемістити")– перемістити файл або каталог – mv
  • os.remove ("шлях_до_файла") – видалити файл – rm
  • shutil.rmtree ("шлях_до_директорії") – видалити директорію та всі файли й директорії в ньому – rm -rf

А тепер розповімо про ці команди детальніше.

Команди для одержання інформації

os.getcwd()

Повертає поточний робочий каталог як рядок. От і все.

os.listdir()

Повертає вміст поточного робочого каталогу як список рядків. Це теж просто.

os.walk()

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

os.walk() повертає такі елементи для кожного каталогу, через який проходить:

  • поточний шлях до каталогу у вигляді рядка;
  • імена підкаталогів у поточному каталозі у вигляді списку;
  • назви файлів у поточному каталозі як список рядків.

Функція робить це для кожного каталогу!

Часто корисно використовувати os.walk() із циклом for для перегляду вмісту каталогу та його підкаталогів. Тому, щоб зберегти кортежі для подальшої обробки, доцільно додавати їх до списку.

import os
cwd = os.getcwd()
for dir_path, dir_names, file_names in os.walk(cwd):
    for f in file_names:
        print(f)

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

Команди, що вносять зміни до файлової системи

os.chdir(“абсолютний_або_відносний_шлях”)

Цей метод змінює поточний робочий каталог на каталог, зазначений у вхідних параметрах, як абсолютний або відносний шлях.

os.path.join()

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

os.path.join() призначений для створення шляху, який працюватиме на більшості операційних систем. Команда приєднує декілька рядків, що зазначені в аргументах, і створює шлях згідно з вимогами ОС, на якій її запустили.

Цитата з документації:

Поєднує один або кілька компонентів шляху інтелектуально. Результатом роботи функції є конкатенація шляху і будь-яких його елементів із відповідним роздільником каталогів (os.sep) після кожного елемента, крім останнього…

В основному, якщо ви використовуєте систему Unix або macOS, os.path.join() вставляє косу риску (“/”) між кожним доданим вами рядком для створення шляху. Якщо операційній системі потрібен інший роздільник (наприклад, “\”), то команда це зрозуміє й використає його.

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

os.makedirs(“директорія1/директорія2”)

os.makedirs() створює каталог і за потреби батьківські каталоги (на відміну від методу) mkdir()).

shutil.copy2 (“шлях_звідки_копіювати”, “шлях_куди_копіювати”)

Існує багато способів копіювання файлів і каталогів у Python. Але доцільно використовуватиshutil.copy2(), оскільки ця команда, крім копіювання даних файлу й прав доступу, намагається скопіювати якомога більше метаданих вхідного файлу.

Переміщення

shutil.move (“шлях_звідки_переміщати, “шлях_куди_переміщати”)

Використовуйте shutil.move(), щоб змінити розміщення файлу. Матимете результат, аналогічний дії copy2, але файли будуть не скопійовані, а переміщені.

Видалення

os.remove (“шлях”)

Банально видаляє файл.

shutil.rmtree (“шлях”)

Видаляє каталог і всі файли та каталоги в ньому.

Висновок

Ви ознайомились з основами роботи з файлами і каталогами в Python. Більше інформації – у документації shutil і os.

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.

2+

Повідомити про помилку

Текст, який буде надіслано нашим редакторам: