Другие инструменты для работы с файлами в модуле os

drugie instrumenty dlya raboty s fajlami v module os Инструменты для работы с файлами и каталогами

В модуле os имеется также ряд инструментов для работы с файлами, которые принимают строку пути к файлу и выполняют ряд операций, связанных с файлами, таких как переименование (os.rename), удаление (os.remove) и изменение владельца файла и прав доступа к нему (os. chown, os.chmod). Рассмотрим несколько примеров использования этих инструментов:

>  >> os.chmod(‘spam.txt’, 0o777) # разрешить доступ всем пользователям

Функции os.chmod установки прав доступа к файлу передается строка из девяти битов, состоящая из трех групп, по три бита в каждой. Эти три группы определяют права доступа, слева направо, для пользователя- владельца файла, для группы пользователей, которой принадлежит файл, и для всех остальных. Три бита внутри каждой группы отражают право на чтение, на запись и на выполнение. Если какой-то бит в этой строке равен «1», это означает разрешение на выполнение соответствующей операции. Например, восьмеричное число 0777 является строкой из девяти единичных битов в двоичном представлении и разрешает все три вида доступа для всех трех групп пользователей; восьмеричное число 0600 означает возможность только чтения и записи для пользователя, который владеет файлом (восьмеричное число 0600 в двоичной записи дает 110 000 000).

Эта схема ведет свое происхождение от системы прав доступа в Unix, но работает также в Windows. Если она вас озадачила, посмотрите описание команды chmod в документации по вашей системе (например, в страницах руководства Unix). Идем дальше:

>  >> os.rename(rC:\temp\spam.txt’, rC:\temp\eggs.txt’) # откуда, куда

>>> os.remove(rC:\temp\spam.txt’) # удалить файл?

WindowsError: [Error 2] The system cannot find the file specified: ‘C:\\ temp\\…’

(WindowsError: [Error 2] Системе не удается найти указанный путь: C:\\ temp\\…’)

>>> os.remove(r’C:\temp\eggs.txt’)

Использованная здесь функция os.rename изменяет имя файла; функция os.remove удаляет файл, она синонимична функции os.unlink (имя последней — имя, которое имеет эта функция в Unix, но оно не знакомо пользователям других платформ)[X]. Модуль os также экспортирует системный вызов stat:

>  >> open(‘spam.txt’, ‘w’).write(‘Hello stat world\n’) # +1 для символа \r

17

>  >> import os

>  >> info = os.stat(r’C:\temp\spam.txt’)

>  >> info

nt.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=18, st_atime=1267645806, st_mtime=1267646072, st_ ctime=1267645806)

>  >> info.st_mode, info.st_size # через атрибуты именованного кортежа (33206, 18)

>  >> import stat

>  >> info[stat.ST_MODE], info[stat.ST_SIZE] # через константы в модуле stat

(33206, 18)

>  >> stat.S_ISDIR(info.st_mode), stat.S_ISREG(info.st_mode)

(False, True)

Функция os.stat возвращает кортеж величин (в версии 3.X это особая разновидность кортежа, элементы которого имеют имена), представляющих низкоуровневую информацию о файле с указанным именем, а модуль stat экспортирует константы и функции для получения этой информации переносимым способом. Например, значение, получаемое из результата функции os.stat по индексу stat.ST_SIZE, соответствует размеру файла, а вызов функции stat.S_ISDIR с параметром «режим», полученным из результата функции os.stat, позволяет проверить, является ли файл каталогом. Однако, как было показано выше, обе эти операции доступны и в модуле os.path, поэтому на практике редко возникает необходимость использовать функцию os.stat; исключение составляют низкоуровневые запросы:

>  >> path = r’C:\temp\spam.txt’

>  >> os.path.isdir(path), os.path.isfile(path), os.path.getsize(path)

(False, True, 18)

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий