Основные инструменты os. path

osnovnye instrumenty os path Системные инструменты

Вложенный модуль os.path предоставляет большой набор собственных средств для работы с каталогами. Например, в него входят переносимые функции для таких задач, как проверка типа файла (isdir, isfile и другие), подтверждение существования файла (exists) и получение размера файла по его имени (getsize):

>>> os.path.isdir(rC:\Users’), os.path.isfile(rC:\Users’)

(True, False)

>>> os.path.isdir(rC:\config.sys’), os.path.isfile(rC:\config.sys’)

(False, True)

>>> os.path.isdir(‘nonesuch’), os.path.isfile(‘nonesuch’)

(False, False)

>>> os.path.exists(r’c:\Users\Brian’)

False

>>> os.path.exists(r’c:\Users\Default’)

True

>>> os.path.getsize(r’C:\autoexec.bat’)

24

Функции os.path.isdir и os.path.isfile сообщают нам о том, является ли имя файла каталогом или простым файлом; обе они возвращают False, если указанный файл не существует (то есть отсутствие файла предполагает отрицание). Есть также функции для разбиения или объединения строк путей к каталогам, которые автоматически используют соглашения об именовании каталогов для той платформы, где работает Python:

>>> os.path.split(r’C:\temp\data.txt’)

(‘C:\\temp’, ‘data.txt’)

>>> os.path.join(r’C:\temp’, ‘output.txt’)

‘C:\\temp\\output.txt’

>  >> name = r’C:\temp\data.txt’ # пути в Windows

>  >> os.path.dirname(name), os.path.basename(name) (‘C:\\temp’, ‘data.txt’)

>  >> name = ‘/home/lutz/temp/data.txt’ # пути в стиле Unix

>  >> os.path.dirname(name), os.path.basename(name) (‘/home/lutz/temp’, ‘data.txt’)

>  >> os.path.splitext(r’C:\PP4thEd\Examples\PP4E\PyDemos.pyw’)

(‘C:\\PP4thEd\\Examples\\PP4E\\PyDemos’, ‘.pyw’)

Функция os.path.split отделяет имя файла от пути к его каталогу, a os.path.join снова соединяет их вместе, и все это — совершенно переносимым образом, с использованием соглашений по оформлению путей, действующих в той системе, где они вызываются. Функции dirname и basename возвращают первый и второй элементы, возвращаемые функцией split, и реализованы просто для удобства, a функция splitext отделяет расширение файла (за последним символом .). Тонкое замечание: эти функции по своему действию почти эквивалентны строковым методам split и join, если вызывать их относительно строковой константы os.sep. Почти, но не совсем:

>>> os.sep

‘\\’

>   >> pathname = r’C:\PP4thEd\Examples\PP4E\PyDemos.pyw’

>   >> os.path.split(pathname) # отделить имя файла от каталога

(‘C:\\PP4thEd\\Examples\\PP4E’, ‘PyDemos.pyw’)

>>> pathname.split(os.sep) # разбить путь по символам слеша

[‘C:’, ‘PP4thEd’, ‘Examples’, ‘PP4E’, ‘PyDemos.pyw’]

>>> os.sep.join(pathname.split(os.sep))

‘C:\\PP4thEd\\Examples\\PP4E\\PyDemos.pyw’

>>> os.path.join(*pathname.split(os.sep))

‘C:PP4thEd\\Examples\\PP4E\\PyDemos.pyw’

Последний вызов join требует передачи отдельных аргументов (отсюда и символ *), но он не вставляет первый символ слеша после буквы, обозначающей имя диска в Windows. Если подобные отличия имеют большое значение, используйте предшествующий вызов метода str. join. Функция normpath может пригодиться в ситуациях, когда в путях произвольно смешиваются разделители компонентов пути для Unix и Windows:

>>> mixed

‘C:\\temp\\public/files/index.html’

>>> os.path.normpath(mixed)

‘C:\\temp\\public\\files\\index.html’

>>> print(os.path.normpath(r’C:\temp\\sub\.\file.ext’))

C:\temp\sub\file.ext

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

>>> os.chdir(rC:\Users’)

>>> os.getcwd()

‘C:\\Users’

>   >> os.path.abspath(‘’) # пустая строка означает тек. раб. каталог (cwd) ‘C:\\Users

>   >> os.path.abspath(‘temp’) # расширяет до полного пути к файлу в тек. кат. ‘C:\\Users\\temp’

>   >> os.path.abspath(rPP4E\dev’) # частичный путь относительно тек. раб. кат. ‘C:\\Users\\PP4E\\dev’

>>> os.path.abspath(‘.’) # расширяет относительные пути C:\\Users

>>> os.path.abspath(‘..’)

‘C:\\’

>>> os.path.abspath(r’..\examples’)

‘C:\\examples’

>  >> os.path.abspath(r’C:\PP4thEd\chapters’) # абсолютные пути не изменяются ‘C:\\PP4thEd\\chapters’

>>> os.path.abspath(r’C:\temp\spam.txt’)

C:\\temp\\spam.txt

Поскольку имена файлов считаются относящимися к текущему рабочему каталогу, если не заданы полными путями, функция os.path.abspath может пригодиться, если потребуется показать пользователю, какой каталог используется в действительности для сохранения файла. В Windows, например, при запуске программ с графическим интерфейсом щелчком на ярлыках в проводнике или на рабочем столе рабочим каталогом программы является тот, в котором находится запускаемый файл, что не всегда очевидно пользователю. В таких случаях может помочь вывод значения, возвращаемого функцией abspath для файла.

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

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