Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.Python.8-10.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Модуль os в Python

Python 3 поставляется с модулем os, что означает «операционная система». Модуль os содержит множество функций для получения информации о локальных каталогах, файлах, процессах и переменных окружения (а в некоторых случаях, и для манипулирования ими). Python предлагает очень хороший унифицированный программный интерфейс для всех поддерживаемых операционных систем, так что ваши программы можно запускать на любом компьютере с минимальным количеством платформо-зависимого кода.

Текущий рабочий каталог

Когда ваше знакомство с Python только начинается, вы много времени проводите в интерактивной оболочке Python. Вы будете видеть примеры, выглядящие следующим образом: 1. Импортирование какого-либо модуля из папки примеров  2. Вызов функции из этого модуля  3. Объяснение результата

Если вы ничего не знаете о текущем рабочем каталоге, то, возможно, шаг 1 окажется неудачным и будет порождено исключение типа ImportError. Почему? Потому что Python будет искать указанный модуль в пути поиска оператора import, но не найдёт его, потому что каталог examples не содержится в путях поиска. Чтобы исправить это, вы можете сделать одно из двух: либо добавить папку examples в путь поиска оператора import;  либо сделать текущим рабочим каталогом папку examples.

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

Модуль os содержит две функции для работы с текущим рабочим каталогом.

>>> import os (1) >>> print(os.getcwd()) C:\Python31  (2) >>> os.chdir('/Users/pilgrim/diveintopython3/examples')  (3) >>> print(os.getcwd()) C:\Users\pilgrim\diveintopython3\examples (4)

1. Модуль os поставляется вместе с Python; вы можете импортировать его когда угодно и где угодно.  2. Используйте функцию os.getcwd() для получения значения текущего рабочего каталога. Когда вы работаете в графической оболочке Python, текущим рабочим каталогом является каталог из которого она была запущена. В Windows это зависит от того, куда вы установили Python; каталог по умолчанию c:\Python31. Если оболочка Python запущена из командной строки, текущим рабочим каталогом считается тот, в котором вы находились, когда запускали её.  3. ↑ Используйте функцию os.chdir() чтобы сменить текущий рабочий каталог.  4. ↑ Когда я вызывал функцию os.chdir(), я использовал путь в стиле Linux (косая черта, нет буквы диска) даже если на самом деле работал в Windows. Это одно из тех мест, где Python пытается стирать различия между операционными системами.

Работа с именами файлов и каталогов

Раз зашла речь о каталогах, я хочу обратить ваше внимание на модуль os.path. Он содержит функции для работы с именами файлов и каталогов.

>>> import os >>> print(os.path.join('/Users/pilgrim/diveintopython3/examples/', 'humansize.py')) /Users/pilgrim/diveintopython3/examples/humansize.py  (1) >>> print(os.path.join('/Users/pilgrim/diveintopython3/examples', 'humansize.py')) /Users/pilgrim/diveintopython3/examples\humansize.py  (2) >>> print(os.path.expanduser('~')) c:\Users\pilgrim (3) >>> print(os.path.join(os.path.expanduser('~'), 'diveintopython3', 'examples', 'humansize.py')) c:\Users\pilgrim\diveintopython3\examples\humansize.py  (4)

1. Функция os.path.join() составляет путь к каталогу из одного или нескольких частичных путей. В данном случае она просто соединяет строки.  2. Это уже менее тривиальный случай. Функция join добавит дополнительную косую черту (slash) к имени папки перед тем как дописать имя файла. В данном случае Python добавляет обратную косую черту (backslash) вместо обыкновенной, потому что я запустил этот пример в Windows. Если вы введёте данную команду в Linux или Mac OS X, вы увидите простую косую черту. Python может обратиться к файлу независимо от того, какой разделитель используется в пути к файлу.  3. Функция os.path.expanduser() раскрывает путь, в котором используется символ ~ для обозначения домашнего каталога текущего пользователя. Функция работает на любой платформе, где у пользователя есть домашний каталог, включая Linux, Mac OS X и Windows. Функция возвращает путь без косой черты в конце, но для функции os.path.join() это не имеет значения.  4. Комбинируя эти две функции, вы можете легко строить файловые пути для папок и файлов в домашнем каталоге пользователя. Функция os.path.join() принимает любое количество аргументов. В других языках при разработке инструментальных средств приходится постоянно писать глупую маленькую функцию addSlashIfNecessary(). В языке программирования Python умные люди уже позаботились об этом.

Модуль os.path также содержит функции для разбиения файловых путей, имён папок и файлов на их составные части.

>>> pathname = ‘/Users/pilgrim/diveintopython3/examples/humansize.py’ >>> os.path.split(pathname) (‘/Users/pilgrim/diveintopython3/examples’, ‘humansize.py’) (1) >>> (dirname, filename) = os.path.split(pathname) (2) >>> dirname ‘/Users/pilgrim/diveintopython3/examples’ (3) >>> filename ‘humansize.py’ (4) >>> (shortname, extension) = os.path.splitext(filename) >>> shortname ‘humansize’ >>> extension ‘.py’ (5)

1. Функция split дробит полный путь и возвращает кортеж, содержащий отдельно путь до каталога и имя файла.  2. Помните, я рассказывал про то, как присваивать несколько значений за раз и как вернуть одновременно несколько значений из функции? Функция os.path.split() действует именно так. Можно присвоить возвращаемое из функции split значение кортежу из двух переменных. Каждая из переменных примет значение соответствующего элемента результирующего кортежа.  3. Первая переменная — dirname — получит значение первого элемента кортежа, возвращаемого функцией os.path.split(), а именно путь до каталога.  4. Вторая переменная — filename — примет значение второго элемента кортежа, возвращаемого функцией os.path.split(), а именно имя файла.  5. Модуль os.path также содержит функцию os.path.splitext(), которая дробит имя файла и возвращает кортеж, содержащий отдельно имя и отдельно расширение файла. Можно использовать ту же технику, что и ранее для присваивания каждого из интересующих значений отдельным переменным.