Простой Python. Современный стиль программирования (Любанович) - страница 165

Python предоставляет множество системных функций, содержащихся в модуле os (сокращение от Operating System — операционная система), который мы будем импортировать для большинства программ этой главы.

Файлы

Python, как и многие другие языки, создал свои файловые операции по шаблону Unix. Некоторые функции вроде chown() и chmod() имеют такие же имена, но при этом появились и некоторые новые функции.

Создаем файл с помощью функции open()

В разделе «Ввод информации в файлы и ее вывод из них» главы 8 вы познакомились с функцией open(). В этом разделе также содержалась информация о том, как использовать ее для открытия файла или его создания, если он не существует. Создадим текстовый файл, который называется oops.txt:

>>>> fout = open('oops.txt', 'wt')

>>>> print('Oops, I created a file.', file=fout)

>>>> fout.close()

После этого выполним несколько проверок.

Проверяем существование файла с помощью функции exists()

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

>>>> import os

>>>> os.path.exists('oops.txt')

>True

>>>> os.path.exists('./oops.txt')

>True

>>>> os.path.exists('waffles')

>False

>>>> os.path.exists('.')

>True

>>>> os.path.exists('..')

>True

Проверяем тип с помощью функции isfile()

Функции, показанные в этом разделе, проверяют, ссылается ли имя на файл, каталог или символьную ссылку (см. примеры, которые располагаются после описания ссылок).

Первой мы рассмотрим функцию isfile(). Она задает простой вопрос: перед нами находится старый добрый законопослушный файл?

>>>> name = 'oops.txt'

>>>> os.path.isfile(name)

>True

Вот так можно определить папку:

>>>> os.path.isdir(name)

>False

Одна точка (.) является сокращением для текущей папки, а две точки (..) — для родительской. Эти папки существуют всегда, поэтому следующее выражение вернет результат True:

>>>> os.path.isdir('.')

>True

Модуль os содержит множество функций, работающих с путем к файлу (полное имя файла, которое начинается с символа / и включает все каталоги). Одна из таких функций, isabs(), определяет, является ли аргумент абсолютным путем. Аргумент не обязательно должен быть именем реально существующего файла:

>>>> os.path.isabs(name)

>False

>>>> os.path.isabs('/big/fake/name')

>True

>>>> os.path.isabs('big/fake/name/without/a/leading/slash')

>False

Копируем файлы с помощью функции copy()

Функция copy() находится в другом модуле, shutil. В этом примере файл oops.txt копируется в файл ohno.txt: