MyTetra Share
Делитесь знаниями!
Примеры использования модуля os в Python
Время создания: 29.07.2019 23:51
Текстовые метки: Python, python-scripts.com, import-os
Раздел: Разные закладки - Python - python-scripts.com
Запись: xintrea/mytetra_db_adgaver_new/master/base/1516450745v9dwyh2g60/text.html на raw.githubusercontent.com

Данный модуль можно применять во многих случаях. В данном разделе мы не рассмотрим каждый из них. Вместо этого, мы рассмотрим, как именно его можно применять, а также ознакомимся с подмодулем, под названием os.path. В частности, мы расскажем о:

  • os.name
  • os.environ
  • os.chdir()
  • os.getcwd()
  • os.getenv()
  • os.putenv()
  • os.mkdir()
  • os.makedirs()
  • os.remove()
  • os.rename()
  • os.rmdir()
  • os.startfile()
  • os.walk()
  • os.path

Это может выглядеть как большой объем материала, но есть еще минимум десяток других задач, которые модуль os может выполнять. Так что данный раздел можно назвать кратким экскурсом. Для использования любого из методов, упомянутых в данном разделе, вам нужно импортировать модуль os, вот так:

Итак, приступим!

os.name

Модуль os обладает как вызываемыми функциями, так и обычными значениями. В случае с os.name, речь идет только о значениях. При доступе к os.name, вы получите информацию о том, с какой платформой вы работаете. Вам откроются следующие значения: ‘posix’, ‘nt’, ‘os2’, ‘ce’, ‘java’, ‘riscos’. Давайте посмотрим на то, что выйдет, если запустить его на Windows 7:


import os

print(os.name) # ответ: nt

Это говорит нам о том, что наш экземпляр Пайтон работает в окне Windows. Как мы об этом узнали? Майкрософт начали называть свою операционную систему NT много лет назад. Например, Windows 7 также носит имя Windows NT 6.1.

os.environ, os.getenv() и os.putenv()

Значение os.environ известно как объект мэппинга (сопоставления), который работает со словарем переменных пользовательской среды. Возможно вы не знали, но каждый раз, когда вы пользуетесь своим компьютером, некоторые переменные среды уже установлены.

Это дает вам полезную информацию, такую как количество процессоров, тип ОЗУ, имя компьютера, и так далее. Посмотрим, что мы сможем узнать о нашем компьютере:


import os

print(os.environ)

Ответ:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

{'ALLUSERSPROFILE': 'C:\\ProgramData',

'APPDATA': 'C:\\Users\\mike\\AppData\\Roaming',

'CLASSPATH': '.;C:\\Program Files\\QuickTime\\QTSystem\\QTJava.zip',

'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files',

'COMPUTERNAME': 'MIKE-PC',

'COMSPEC': 'C:\\Windows\\system32\\cmd.exe',

'FP_NO_HOST_CHECK': 'NO',

'HOMEDRIVE': 'C:',

'HOMEPATH': '\\Users\\mike',

'LOCALAPPDATA': 'C:\\Users\\mike\\AppData\\Local',

'LOGONSERVER': '\\\\MIKE-PC',

'NUMBER_OF_PROCESSORS': '2',

'OS': 'Windows_NT',

'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',

'PROCESSOR_ARCHITECTURE': 'x86',

'PROCESSOR_IDENTIFIER': 'x86 Family 6 Model 15 Stepping 13, GenuineIntel',

'PROCESSOR_LEVEL': '6',

'PROGRAMDATA': 'C:\\ProgramData',

'PROGRAMFILES': 'C:\\Program Files',

'PSMODULEPATH': 'C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\',

'PUBLIC': 'C:\\Users\\Public',

'PYTHONIOENCODING': 'cp437',

'QTJAVA': 'C:\\Program Files\\QuickTime\\QTSystem\\QTJava.zip',

'SESSIONNAME': 'Console',

'SYSTEMDRIVE': 'C:',

'SYSTEMROOT': 'C:\\Windows',

'TEMP': 'C:\\Users\\mike\\AppData\\Local\\Temp',

'TMP': 'C:\\Users\\mike\\AppData\\Local\\Temp',

'USERDOMAIN': 'mike-PC',

'USERNAME': 'mike',

'USERPROFILE': 'C:\\Users\\mike',

'VBOX_INSTALL_PATH': 'C:\\Program Files\\Oracle\\VirtualBox\\',

'VS90COMNTOOLS': 'C:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\Tool\s\\',

'WINDIR': 'C:\\Windows',

'WINDOWS_TRACING_FLAGS': '3',

'WINDOWS_TRACING_LOGFILE': 'C:\\BVTBin\\Tests\\installpackage\\csilogfile.log',

'WINGDB_ACTIVE': '1',

'WINGDB_PYTHON': 'c:\\python27\\python.exe',

'WINGDB_SPAWNCOOKIE': 'rvlxwsGdD7SHYIJm'}

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


import os

print(os.environ["TMP"]) # C:\\Users\\mike\\AppData\\Local\\Temp

Вы также можете использовать функцию os.getenv для доступа к этой переменной:


import os

print(os.getenv("TMP")) # C:\\Users\\mike\\AppData\\Local\\Temp

Полезность использования os.getenv() вместо словаря os.environ заключается в том, что если вы находитесь в положении, когда вам нужно получить доступ к переменной среды, которая не существует, функция getenv попросту ничего не сделает. Если вы попытаетесь сделать то же самое, пользуясь os.environ, вы получите уведомление об ошибке. Давайте попробуем на примере:


import os

print(os.environ["TMP2"])

Результат выполнения данного скрипта:


Traceback (most recent call last):

    File "<pyshell#1>", line 1, in <module>

        os.environ["TMP2"]

    File "C:\Python27\lib\os.py", line 423, in __getitem__

        return self.data[key.upper()]

KeyError: 'TMP2'

os.chdir() и os.getcwd()

Функция os.chdir позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии. Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать os.getcwd(). Попробуем воспользоваться обоими модулями:


import os

print(os.getcwd()) # C:\\Python27

os.chdir(r"C:\Users\mike\Documents")

print(os.getcwd()) # C:\\Users\\mike\\Documents

Указанный код демонстрирует нам, что мы открыли директорию по умолчанию в Пайтоне, после запуска данного кода в IDLE. После этого мы изменили папки, при помощи os.chdir(). Наконец, мы вызывали os.getcwd() еще раз, чтобы убедиться, что все изменения были выполнены правильно.

os.mkdir() и os.makedirs()

Как вы могли догадаться, эти два метода используются для создания папок. Первая, os.mkdir(), позволяет создать одну папку. Попробуем:


import os

os.mkdir("test")

path = r'C:\Users\mike\Documents\pytest'

os.mkdir(path)

Первая строка кода создает папку под названием test в определенном каталоге. Вы можете использовать эти модули в предыдущем разделе, чтобы узнать, где именно вы запустили свой код, на случай, если вы забыли. Во втором примере мы назначили путь к переменной, затем к os.mkdir(). Это позволяет вам создать папку в любой точке вашей системы, где есть доступ. Функция os.makedirs() создает промежуточные папки в пути, если их там нет. В целом, это значит, что вы создали путь, в котором размещены папки. Лично я часто прибегал к данному решению, когда была необходимость создания журнала, с датированной структурой, например Год\Месяц\День. Давайте взглянем на пример:


import os

path = r'C:\Users\mike\Documents\pytest\2014\02\19'

os.makedirs(path)

Что произошло? Этот код просто создал кучу папок! Если в вашей системе все еще есть папка pytest, то в ней появится папка 2014, в которой также есть папка, в которой, удивительно, находится еще одна. Попробуйте сами, воспользовавшись рабочим путем в вашей системе.

os.remove() и os.rmdir()

Функции os.remove() и os.rmdir() используются для удаления файлов и каталогов соответственно. Посмотрим на os.remove():


import os

os.remove("test.txt")

Этот фрагмент кода пытается удалить файл под названием test.txt из вашего рабочего каталога. Если модуль не может найти файл, должно появиться уведомление о той или иной ошибке. Ошибка также возникнет, если файл уже используется (другими словами закрыт), или у вас нет разрешения для удаления данного файла. Возможно, вы хотите проверить os.unlink, который выполняет ту же функцию. Термин unlink – привычное для Unix название данной процедуры. Взглянем на пример работы os.rmdir():


import os

os.rmdir("pytest")

Данный код попытается удалить каталог под названием pytest из каталога, используемого в данный момент в работе. В случае, если это удалось, каталог pytest исчезнет. Ошибка может возникнуть, если каталога с таким названием не существует, если у вас нет разрешения на его удаление, или если каталог не пустой. Вам возможно хочется взглянуть на os.removedirs(), который может удалить пустые вложенные каталоги.

os.rename(src, dst)

Функция os.rename() применяется тогда, когда нужно переименовать файл или папку. Посмотрим на примере:


os.rename("test.txt", "pytest.txt")

В этом примере, мы указали os.rename на то, что нужно переименовать файл под названием test.txt на pytest.txt. Это произойдет в каталоге, с которым мы в данный момент работаем. Ошибка может возникнуть в том случае, если вы попытаетесь переименовать несуществующий файл, или если у вас нет доступа к данной операции. Также существует функция os.renames, которая меняет название папки или файла соответственно.

os.startfile()

Метод os.startfile() позволяет нам «запустить» файл в привязанной к нему программе. Другими словами, мы можем открыть файл вместе с привязанной к нему программой, как когда вы открываете файл PDF двойным щелчком, и он открывается в программе Adobe Reader. Попробуем:


import os

os.startfile(r'C:\Users\mike\Documents\labels.pdf')

В данном примере мы прошли полный путь к модулю os.startfile, который указывает на открытие файла под названием labels.pdf. На моем компьютере данная функция открывает файл PDF в программе Adobe Reader. Попробуйте открыть файлы PDF, MP3 или фотографии на своем компьютере при помощи данного метода, чтобы увидеть как он работает.

os.walk()

Метод os.walk() дает нам возможность для итерации на корневом уровне пути. Это значит, что мы можем назначить путь к этой функции и получить доступ ко всем её подкаталогам и файлам. Используем одну из папок Пайтон, при помощи которой мы можем проверить данную функцию. Мы используем C:\Python27\Tools


import os

path = r'C:\Python27\Tools'

for root, dirs, files in os.walk(path):

    print(root)

Результат работы:


C:\Python27\Tools

C:\Python27\Tools\i18n

C:\Python27\Tools\pynche

C:\Python27\Tools\pynche\X

C:\Python27\Tools\Scripts

C:\Python27\Tools\versioncheck

C:\Python27\Tools\webchecker

Мы можем отобразить и весь список каталогов и файлов.


import os

for root, dirs, files in os.walk(path):

    print(root)

    for _dir in dirs:

        print(_dir)

    for _file in files:

        print(_file)

Эта часть кода покажет нам весьма большой объем, так что не будем демонстрировать всю выдачу, вы можете ознакомиться с содержимым сами. Поздравляем, теперь мы готовы к тому, чтобы научиться работать с путями!

os.path

Подмодуль os.path модуля os имеет широкий ряд встроенных преимуществ. Ознакомимся со следующими функциями:

  • basename
  • dirname
  • exists
  • isdir and isfile
  • join
  • split

Это не все функции подмодуля. С ними мы можем ознакомиться позже.

os.path.basename

Функция basename вернет название файла пути. Пример:


import os

os.path.basename(r'C:\Python27\Tools\pynche\ChipViewer.py')

# ChipViewer.py

Это очень полезная функция, особенно в тех случаях, когда нужно использовать имя файла для наименования того или иного связанного с работой файла, например лог-файл. Такая ситуация возникает часто при работе с файлами данных.

os.path.dirname

Функция dirname возвращает только часть каталога пути. Это проще понять, если мы взглянем на пример кода:


import os

print( os.path.dirname(r'C:\Python27\Tools\pynche\ChipViewer.py') )

# C:\\Python27\\Tools\\pynche

В данном примере мы просто возвращаем путь к каталогу. Это также полезно, когда вам нужно сохранить другие файлы рядом с тем, который вы обрабатываете в данный момент. Как и в случае с лог-файлом, упомянутым выше.

os.path.exists

Функция exists говорит нам, существует ли файл, или нет. Все что вам нужно, это указать ему путь. Взглянем на пример:


import os

os.path.exists(r'C:\Python27\Tools\pynche\ChipViewer.py') # True

os.path.exists(r'C:\Python27\Tools\pynche\fake.py') # False

В первом примере, мы указали функции exists настоящий путь, на что она указывает как True. Это говорит о том, что данный путь существует. Во втором примере, мы указали неправильный путь, от чего функция указывает нам на это сообщением False.

os.path.isdir / os.path.isfile

Методы isdir и isfile тесно связаны с методом exists, так как они также тестируют присутствие или отсутствие файлов или папок на тех или иных путях. Однако, isdir проверяет только пути к папкам, а isfile, соответственно, к файлам. Если вам нужно проверить путь, и не важно, папка это или файл, проще будет воспользоваться методом exists. В любом случае, взглянем на пару примеров:


import os

os.path.isfile(r'C:\Python27\Tools\pynche\ChipViewer.py') # True

os.path.isdir(r'C:\Python27\Tools\pynche\ChipViewer.py') # False

os.path.isdir(r'C:\Python27\Tools\pynche') # True

os.path.isfile(r'C:\Python27\Tools\pynche') # False

Уделите особое внимание данным примерам. В первом мы указали путь к файлу и проверили, является ли этот путь в действительности файлом. Затем, во втором примере, мы проделали то же самое, но в контексте папки. Вы можете лично ознакомиться с результатами. После этих двух примеров, мы немного изменили условия, указав путь к папке для обеих функций. Эти примеры наглядно демонстрируют то, как эти функции работают.

os.path.join

Метод join позволяет вам совместить несколько путей при помощи присвоенного разделителя. К примеру, в Windows, в роли разделителя выступает бэкслэш (косая черта, указывающая назад), однако в Linux функция разделителя присвоена косой черте, указывающей вперед (forward slash). Как это работает:


import os

print( os.path.join(r'C:\Python27\Tools\pynche', 'ChipViewer.py') )

# C:\\Python27\\Tools\\pynche\\ChipViewer.py

В данном примере мы совместили путь каталога и файла вместе, для получения рабочего пути. Обратите внимание на то, что метод join не указывает на то, какой результат в итоге вышел.

os.path.split

Метод split разъединяет путь на кортеж, который содержит и файл и каталог. Взглянем на пример:


import os

print( os.path.split(r'C:\Python27\Tools\pynche\ChipViewer.py') )

# ('C:\\Python27\\Tools\\pynche', 'ChipViewer.py')

В данном примере показано, что происходит, когда мы указываем путь к файлу. Теперь взглянем на то, что происходит, если в конце пути нет названия файла:


import os

print( os.path.split(r'C:\Python27\Tools\pynche') )

# (‘C:\Python27\Tools’, ‘pynche’)

Как видите, данная функция берет путь и разъединяет его таким образом, что подпапка стала вторым элементом кортежа с остальной частью пути в первом элементе. Напоследок, взглянем на бытовой случай использования split:


import os

dirname, fname = os.path.split(r'C:\Python27\Tools\pynche\ChipViewer.py')

print(dirname)

# C:\\Python27\\Tools\\pynche

print(fname)

# ChipViewer.py

В данном примере указано, как сделать множественное назначение. Когда вы разъединяете путь, он становится кортежем, состоящим из двух частей. После того, как мы опробовали две переменные с левой части, первый элемент кортежа назначен к первой переменной, а второй элемент к второй переменной соответственно.

Подведем итоги

С данного момента модуль os можно смело назвать старым добрым знакомым. В данном разделе мы научились:

  1. Работать со значениями среды;
  2. Менять каталоги и находить тот, который в данный момент является рабочим;
  3. Создавать и удалять папки и файлы;
  4. Переименовывать папки и файлы;
  5. Открывать файл в соответствующей ему программе;
  6. Работать с путями.

И это не полный список того, что можно делать при помощи модуля os.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования