Содержание папки
Модуль стандартной библиотеки os (от «operation system») предоставляет множество полезных функций для произведения системных вызовов. Одна из базовых функций этого модуля — os.listdir .
С точки зрения операционной системы нет разницы между файлом, папкой или другим подобным объектом, типа ссылки. Поэтому os.listdir() возвращает список как файлов, так и папок. Обратите внимание, что порядок элементов возвращаемого списка не регламентируется, если вам нужно их отсортировать не забудьте сделать это:
Работа с путями к файлам и папкам
Модуль os содержит подмодуль os.path , который позволяет работать с путями файлов и папок. Импортировать этот модуль отдельно не нужно, достаточно выполнить import os .
Присоединение одной части пути к другой
Работа с путями к файлам и папкам как с простыми строками чревата множеством ошибок и может создать проблемы при переносе программы между различными операционными системами. Правильный путь объединить две части пути — это использование os.path.join :
Извлечение имени файла из пути
Функция os.path.split совершает обратное действие — отрезает имя файла или ниже лежащей папки от пути:
Извлечение расширения
Кроме того, может пригодиться функция os.path.splitext , котоая отрезает расширение файла:
Проверка типа файла
Кроме прочего, модуль os.path содержит функции для проверки существования файла и для определения его типа:
Манипуляции с файлами и папками
Производите все манипуляции с файлами с осторожностью, придерживайтесь правила «семь раз отмерь — один раз отрежь». Не забывайте программно производить все возможные проверки перед выполнением операций.
Создание файла
Нет ничего проще, чем создать пустой файл, достаточно открыть несуществующий файл с флагом ‘x’ :
Конечно, можно было бы использовать флаг ‘w’ , но тогда уже существующий файл был бы стёрт. С флагом ‘x’ open либо создаст новый файл, либо выбросит ошибку.
Создание папки
Для создания новой папки используйте os.mkdir(name) . Эта функция выбросит ошибку, если по указанному пути уже существует файл или папка. Если вам нужно создать сразу несколько вложенных папок, то смотрите функцию os.makedirs(name, exist_ok=False) .
Перемещение и переименование
Для удобной манипуляции с файлами и папками в стандартной библиотеки Python существует специальный модуль shutil . Функция shutil.move(source, destination) позволяет вам переместить любой файл или папку (даже непустую). Обратите внимание, что если destination — это уже существующая папка, то файл/папка будет перемещена внутрь неё, в остальных случаях файл/папка будут скопированы точно по нужному адресу. В случае успеха, функция вернёт новое местоположение файла. Если destination существует и не является папкой, то будет выброшена ошибка.
Как же переименовать файл? Несмотря на то, что os содержит специальную функцию для переименования, нужно понимать, что в рамках одной файловой системы перемещение и переименование — это одно и то же. Когда вы переименовываете файл, его содержимое не переписывается на носителе в другое место, просто файловая система теперь обозначает его положение другим путём.
Копирование
Скопировать файл можно с помощью функции shutil.copy(source, destination) . Правила расположения копии будут те же, что и при использовании shutil.move , за тем исключением, что если destination существует и не является файлом, то он будет заменён и ошибки это не вызовет.
Скопировать папку для операционной системы сложнее, ведь мы всегда хотим скопировать не только папку, но и её содержимое. Для копирования папок используйте shutil.copytree(source, destination) . Обратите внимание, что для этой функции destination всегда должно быть путём конечного расположения файлов и не может быть уже существующей папкой.
Удаление
Удалить файл можно с помощью функции os.remove , а пустую папку с помощью функции os.rmdir .
А вот для удаления папки с содержимым вновь понадобится shutil . Для удаления такой папки используйте shutil.rmtree .
Будьте осторожны, команды удаления стирают файл, а не перемещают его в корзину, вне зависимости от операционной системы! После такого удаления восстановить файл может быть сложно или вовсе невозможно.
Домашняя работа
- В текущей папке лежат файлы с расширениями .mp3 , .flac и .oga . Создайте папки mp3 , flac , oga и положите туда все файлы с соответствующими расширениями.
- В текущей папке лежит две других папки: vasya и mila , причём в этих папках могут лежать файлы с одинаковыми именами, например vasya/kursovaya.doc и mila/kursovaya.doc . Скопируйте все файлы из этих папок в текущую папку назвав их следующим образом: vasya_kursovaya.doc , mila_test.pdf и т.п.
- В текущей папке лежат файлы следующего вида: S01E01.mkv , S01E02.mkv , S02E01.mkv и т.п., то есть все файлы начинаются с S01 или S02 . Создайте папки S01 и S02 и переложите туда соответствующие файлы.
- В текущей папке лежат файлы вида 2019-03-08.jpg , 2019-04-01.jpg и т.п. Отсортируйте файлы по имени и переименуйте их в 1.jpg , 2.jpg , …, 10.jpg , и т.д.
- В текущей папке лежат две другие папки: video и sub . Создайте новую папку watch_me и переложите туда содержимое указанных папок (сами папки класть не надо).
- В текущей папке лежат файлы типа Nina_Stoletova.jpg , Misha_Perelman.jpg и т.п. Переименуйте их переставив имя и фамилию местами.
- В текущей папке лежит файл list.tsv , в котором с новой строки написаны имена некоторых других файлов этой папки. Создайте папку list и переложите в неё данные файлы.
Для тестирования вашей программы положите в репозиторий файлы и папки с соответствующими именами. Файлы должны быть пустыми, если не указано обратного.
Взаимодействие с файловой системой через Python
В прошлой статье мы говорили о работе с файлами в 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()
Создаем папки в Python
Чтобы создать одну папку, применяется функция mkdir. Эта функция сможет создать только одну папку в существующем пути, если указанного пути не существует, то вызовется ошибка. Ниже это показывает код на Python:
>>> os.mkdir(‘dir’) # все ок
>>> os.mkdir(‘dir2/sub-dir’)
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — → 1 os.mkdir(‘dir2/sub-dir’) FileNotFoundError: [Errno 2] No such file or directory: ‘dir2/sub-dir’
А вот функция makedirs в случае, если пути не существует, создаст его. Поэтому если вам требуются также и подпапки, используйте именно ее.
Переименовываем файлы и папки
Функция rename изменит имя файла или папки, если они существуют. Функция не сможет переименовать папку в название, которое уже существует в каталоге, если она что-то внутри содержит.
>>> os.rename(‘dir’, ‘tmpdir’) # все ок
OSError: [Errno 39] Directory not empty: ‘dir’ -> ‘Videos’
Удаляем папки и файлы
Для удаления файла используется функция remove. Ниже Python-код удалит 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
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
Папки: []
Файлы: []
How to create new folder? [duplicate]
I want to put output information of my program to a folder. if given folder does not exist, then the program should create a new folder with folder name as given in the program. Is this possible? If yes, please let me know how.
Suppose I have given folder path like «C:\Program Files\alex» and alex folder doesn’t exist then program should create alex folder and should put output information in the alex folder.
3 Answers 3
You can create a folder with os.makedirs()
and use os.path.exists() to see if it already exists:
If you’re trying to make an installer: Windows Installer does a lot of work for you.
Как создать папку python
Ряд возможностей по работе с каталогами и файлами предоставляет встроенный модуль os . Хотя он содержит много функций, рассмотрим только основные из них:
mkdir() : создает новую папку
rmdir() : удаляет папку
rename() : переименовывает файл
remove() : удаляет файл
Создание и удаление папки
Для создания папки применяется функция mkdir() , в которую передается путь к создаваемой папке:
Для удаления папки используется функция rmdir() , в которую передается путь к удаляемой папке:
Переименование файла
Для переименования вызывается функция rename(source, target) , первый параметр которой — путь к исходному файлу, а второй — новое имя файла. В качестве путей могут использоваться как абсолютные, так и относительные. Например, пусть в папке C://SomeDir/ располагается файл somefile.txt . Переименуем его в файл «hello.txt»:
Удаление файла
Для удаления вызывается функция remove() , в которую передается путь к файлу: