OS Python
Основы
Введение в тему
Модуль 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 Базовое имя пути: scratchesos 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.1os 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: Falseos 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 — это папка? Trueos 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 Но существует ли этот путь? Falseos 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 предоставляет множество функций для работы с операционной системой, причём их поведение, как правило, не зависит от ОС, поэтому программы остаются переносимыми. Здесь будут приведены наиболее часто используемые из них.
Будьте внимательны: некоторые функции из этого модуля поддерживаются не всеми ОС.
Standard way to open a folder window in linux?
What about unix/linux? Is there a standard way to do this or do I have to special case gnome/kde/etc and manually run the appropriate application (nautilus/konqueror/etc)? This looks like something that could be specified by the freedesktop.org folks (a python module, similar to webbrowser , would also be nice!).
3 Answers 3
os.system('xdg-open "%s"' % foldername)
xdg-open can be used for files/urls also
it's better to use import subprocess / subprocess.Popen(['xdg-open', foldername]) as this avoids quoting problems
this would probably have to be done manually, or have as a config item since there are many file managers that users may want to use. Providing a way for command options as well.
There might be an function that launches the defaults for kde or gnome in their respective toolkits but I haven't had reason to look for them.
You're going to have to do this based on the running window manager. OSX and Windows have a (defacto) standard way because there is only one choice.
You shouldn't need to specify the exact filemanager application, though, this should be possible to do through the wm. I know Gnome does, and it's important to do this in KDE since there are two possible file managers (Konqueror/Dolphin) that may be in use.
I agree that this would be a good thing for freedesktop.org to standardize, although I doubt it will happen unless someone steps up and volunteers to do it.
EDIT: I wasn't aware of xdg-open. Good to know!