В прошлой статье мы говорили о работе с файлами в Python. Файлы и папки можно также организовывать по каталогам, что очень удобно, например, в Google Colab. Сегодня рассмотрим управление файлами и папками с помощью Python-модуля os. Читайте далее, что такой текущий рабочий каталог; вывод всех файлов и папок; создание, переименование и удаление папок и файлов; а также обход дерева каталогов.
Текущая рабочая директория
Python работает с файловой системой относительно текущей рабочей директории. Чтобы узнать, какая она на вашей операционной системе, используется функция getcwd
(cwd расшифровывается как current working directory):
>>> os.getcwd() '/home/root'
Функция chdir
сменит ее на другую, которая будет указана аргументом:
>>> os.chdir('/home/root/Documents') >>> os.getcwd() home/root/Documents'
Получение списков файлов и папок
Функция listdir
без указания аргумента покажет все файлы и папки текущей рабочей директории. Можно также указать аргументом интересующий вас путь. Ниже представлен код на Python.
>>> os.listdir() ['Documents', 'Music', 'Public', 'Videos', 'Desktop', 'Downloads', 'Pictures', 'Templates']
Создаем папки в Python
Чтобы создать одну папку, применяется функция mkdir
. Эта функция сможет создать только одну папку в существующем пути, если указанного пути не существует, то вызовется ошибка. Ниже это показывает код на Python:
>>> os.mkdir('dir') # все ок >>> os.mkdir('dir2/sub-dir') # папки dir2 не существует --------------------------------------------------------------------------- ----> 1 os.mkdir('dir2/sub-dir') FileNotFoundError: [Errno 2] No such file or directory: 'dir2/sub-dir'
А вот функция makedirs
в случае, если пути не существует, создаст его. Поэтому если вам требуются также и подпапки, используйте именно ее.
>>> os.makedirs('dir2/sub-dir')
Переименовываем файлы и папки
Функция rename
изменит имя файла или папки, если они существуют. Функция не сможет переименовать папку в название, которое уже существует в каталоге, если она что-то внутри содержит.
>>> os.rename('dir', 'tmpdir') # все ок >>> os.rename('tmpdir', 'Videos') --------------------------------------------------------------------------- OSError: [Errno 39] Directory not empty: 'dir' -> 'Videos'
Удаляем папки и файлы
Для удаления файла используется функция remove
. Ниже Python-код удалит file:
>>> os.remove('file')
Удалить одну папку можно с функцией rmdir
. А вот за удаление целого каталога отвечает removedirs
. Например, имеется каталог dir/sub-dir, тогда rmdir('dir/sub-dir')
удалит только папку sub-dir, а removedirs('dir/sub-dir')
удалит и dir, и sub-dir. Примеры на Python:
>>> os.rmdir('direct') # удалит папку >>> os.makedirs('dir/sub-dir') # удалит каталог
Извлекаем информацию из файлов и папок
Функция stat вернет статус файла или папки. Статус имеет много атрибутов, но наиболее полезный из них — st_mtime
, который содержит время последнего изменения содержимого в секундах (modification time). Это время можно преобразовать в datetime, о котором мы говорили тут. Вот так, в итоге, будет выглядеть Python-код:
>>> from datetime import datetime >>> cwd = os.getcwd() >>> status_info = os.stat(cwd) >>> datetime.fromtimestamp(status_info.st_mtime) datetime.datetime(2020, 9, 3, 13, 12, 13, 825475)
Гуляем по каталогу
Функция walk
сгенерирует все дерево каталога. Поскольку возвращается генератор, то по нему можно итерироваться, причем генератор производит кортеж из трех значений: путь до папки, имя папки, имя файлов. Код на Python ниже демонстрирует это на примере каталога tmpdir, который имеет папки и файлы, а внутри этих папок также имеются файлы и папки.
>>> route = '/home/root/tmpdir' >>> for dirpath, dirnames, filenames in os.walk(route): ... print('Текущий путь:', dirpath) ... print('Папки:', dirnames) ... print('Файлы:', filenames) ... print() ... Текущий путь: /home/root/tmpdir Папки: ['sub2-dir', 'sub3-dir'] Файлы: ['thisisfile.bat'] Текущий путь: /home/root/tmpdir/sub2-dir Папки: ['sub2-dir2', 'sub2-dir1'] Файлы: ['somefile.txt'] Текущий путь: /home/root/tmpdir/sub2-dir/sub2-dir2 Папки: [] Файлы: [] Текущий путь: /home/root/tmpdir/sub2-dir/sub2-dir1 Папки: [] Файлы: ['sub2-dir1_file.txt'] Текущий путь: /home/root/tmpdir/sub3-dir Папки: [] Файлы: ['file.bin']
В следующей статье рассмотрим модули управления путями файловой системы с os.path
и pathlib
. А как работать с файловой системой в Python на практических примерах реальных Data Science проектов, вы узнаете на наших курсах в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.