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: