Введение в тему
Модуль os Python предоставляет возможность взаимодействовать с операционной системой, независимо от того, какая из них установлена на устройстве, что делает программы универсальными.
Этот модуль является частью стандартной библиотеки и не требует установки.
Модуль os предоставляет множество функций, которые можно применять при работе с операционной системой. В этом уроке Вы изучите основные возможности данной библиотеки.
os chdir и os getcwd
Функция os.chdir даёт возможность сменить директорию. При запуске скрипта базовой папкой является та, в которой этот скрипт был запущен.
Узнать полный текущий путь к рабочей папке позволяет функция os.getcwd().
Приведём пример использования обеих функций:
import os
print("Текущая директория:", os.getcwd())
os.chdir(r"C:\Users\Dushenko\Desktop")
print("Новая директория:", os.getcwd())
# Вывод:
Текущая директория: C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1\scratches
Новая директория: C:\Users\Dushenko\Desktop
Листинг этой программы демонстрирует нам, что была открыта папка по умолчанию в Питоне. После этого директория была изменена при помощи os.chdir(). Затем была вызвана os.getcwd() еще раз, что продемонстрировало изменение директории.
os mkdir и os makedirs
Этот метод предназначен для создания новой папки в текущей. Выкидывает исключение OSError, если папка уже существует.
import os
print("Содержимое текущей директории:", os.listdir())
os.mkdir('new_scratches')
print("Содержимое текущей директории:", os.listdir())
# Вывод:
Содержимое текущей директории: ['scratch.py']
Содержимое текущей директории: ['new_scratches', 'scratch.py']
os.makedirs — создаёт директорию, создавая при этом промежуточные директории.
import os
print("Содержимое текущей директории:", os.listdir())
os.makedirs('new_scratches/example')
print("Содержимое текущей директории:", os.listdir())
os.chdir(os.getcwd() + r'\\new_scratches')
print("Содержимое директории new_scratches:", os.listdir())
# Вывод:
Содержимое текущей директории: ['scratch.py']
Содержимое текущей директории: ['new_scratches', 'scratch.py']
Содержимое директории new_scratches: ['example']
os remove и os rmdir
Эта функция предназначена для удаления файлов.
import os
print("Содержимое текущей директории:", os.listdir())
os.remove('example.txt')
print("Содержимое текущей директории:", os.listdir())
# Вывод:
Содержимое текущей директории: ['example.txt', 'scratch.py']
Содержимое текущей директории: ['scratch.py']
import os os.mkdir('example') print("Содержимое текущей директории:", os.listdir()) os.rmdir('example') print("Содержимое текущей директории:", os.listdir()) # Вывод: Содержимое текущей директории: ['example', 'scratch.py'] Содержимое текущей директории: ['scratch.py']
os rename src dst
Функция os.rename() применяется для изменения имени файлов или папок.
import os
os.mkdir('example')
print("Содержимое текущей директории:", os.listdir())
os.rename('example', 'пример')
print("Содержимое текущей директории:", os.listdir())
# Вывод:
Содержимое текущей директории: ['example', 'scratch.py']
Содержимое текущей директории: ['scratch.py', 'пример']
os startfile
Функция os.startfile() для того, чтобы открыть файл в ассоциированной с ним программе. Эта функция аналогична двойному щелчку по файлу в операционной системе.
import os
print("Содержимое текущей директории:", os.listdir())
os.startfile('example.py')
# Вывод:
Содержимое текущей директории: ['example.py', 'scratch.py']
В результате выполнения этого кода файл ‘example.py’ откроется в программе по умолчанию. Если Питоновские файлы у Вас ассоциированы со средой обработки, то откроется в ней, иначе этот скрипт исполнится.
os walk
Функция os.walk() возвращает объект-генератор, из которого получают кортежи для каждого каталога переданной файловой иерархии.
Каждый кортеж состоит из трех элементов:
Адрес очередного каталога в виде строки.
В форме списка имена подкаталогов первого уровня вложенности для данного каталога.
В виде списка имена файлов данного каталога.
import os
print("Содержимое текущей директории:", os.listdir())
walk = os.walk('..')
for item in walk:
print(item)
# Вывод:
…
('..\\scratches', [], ['example.py', 'scratch.py'])
('..\\ssl', [], [])
…
os path
Модуль os.path включает в себя несколько функции для работы с путями файловой системы. Параметры пути должны быть переданы в формате строк или байтов. Вместо этого модуля рекомендуется использовать модуль pathlib, доступный в стандартной библиотеке Питона начиная с версии 3.4.
os path basename
Функция basename() модуля os.path возвращает базовое имя пути.
import os
path = os.getcwd()
print("Текущая директория:", path)
print('Базовое имя пути:', os.path.basename(path))
# Вывод:
Текущая директория: C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1\scratches
Базовое имя пути: scratches
os path dirname
Функция dirname возвращает ту часть пути, которую составляет каталог пути.
import os
path = os.getcwd()
print("Текущая директория:", path)
print('Базовое имя пути:', os.path.dirname(path))
# Вывод:
Текущая директория: C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1\scratches
Базовое имя пути: C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1
os path exists
Функция exists модуля os.path проверяет, существует ли указанный файл.
import os
print(r'Существует ли путь C:\Users:', os.path.exists(r'C:\Users'))
print(r'Существует ли путь C:\Example:', os.path.exists(r'C:\Example'))
# Вывод:
Существует ли путь C:\Users: True
Существует ли путь C:\Example: False
os path isdir os path isfile
Функции isdir и isfile проверяют присутствие или отсутствие файлов или директорий в указанном пути. isdir проверяет наличие директории, а isfile — файла.
import os
print(r'C:\Users - это файл?', os.path.isfile(r'C:\Users'), sep='\n')
print(r'C:\Users - это папка?', os.path.isdir(r'C:\Users'), sep='\n')
# Вывод:
C:\Users — это файл?
False
C:\Users — это папка?
True
os path join
В разных операционных системах используется разный разделитель пути. В Виндовс это бекслеш, а в Линукс – слеш. Как же сделать объединение путей в Вашей программе универсальным?
Функция join предназначена для объединения нескольких путей в любой OS.
import os
path = os.getcwd()
print("Текущая директория:", path)
print("Добавим 'example':", new_path := os.path.join(path, r"example"))
print("Но существует ли этот путь?", os.path.exists(new_path))
# Вывод:
Текущая директория: C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1\scratches
Добавим 'example': C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1\scratches\example
Но существует ли этот путь? False
os path split
Метод split принимает путь и возвращает кортеж, состоящий из базового имени пути и каталога пути.
import os
path = os.getcwd()
print("Текущая директория:", path)
print("Базовое имя пути:", os.path.split(path)[1], sep='\n')
print("Каталог пути:", os.path.split(path)[0], sep='\n')
# Вывод:
Текущая директория: C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1\scratches
Базовое имя пути:
scratches
Каталог пути:
C:\Users\Dushenko\AppData\Roaming\JetBrains\PyCharm2021.1
Подведем итоги
Модуль os предоставляет множество функций для работы с операционной системой, причём их поведение, как правило, не зависит от ОС, поэтому программы остаются переносимыми. Здесь будут приведены наиболее часто используемые из них.
Будьте внимательны: некоторые функции из этого модуля поддерживаются не всеми ОС.