Командная строкаКурсы

Работа с файлами

Опубликовано

Начнём с Папок для файлов.

В предыдущем уроке мы все команды вбивали в окно консоли. Теперь же попробуем использовать наши знания для написания файла с программой, которая будет сортировать файлы в папке.
Не забудем импортировать библиотеку import os и создадим методом mkdir() папку downloads.

При первом запуске должна создастся папка и никаких ошибок быть не должно. А вот при последующих запусках мы всё время будем получать ошибку, которая сообщает нам о невозможности создать папку downloads, поскольку она уже существует. Чтобы избежать получения данной ошибки при каждом запуске, напишем конструкцию с использованием модуля path из библиотеки os.

if not os.path.exists(‘downloads’):
os.mkdir(‘downloads’)

os.path.exists() — возвращает True если такая папка существует. Приставкой not мы инвертируем результат работы. В итоге наше условие звучит как «Если папки downloads не существует».

Запустим программу. Ошибок нет. Теперь удалим папку downloads и опять запустим программу, наше условие сработает и создастся папка.

Нужно больше директорий!!!

os.chdir(‘downloads’)
folders = [‘images’, ‘music’, ‘docs’, ‘other’]

После участка где мы создаём папку, напишем команду для перехода внутрь этой директории. Ниже объявим список наших будущих папок.

Теперь пройдёмся по элементам списка folders и создадим соответствующие папки. Не забудьте написать проверку существования директории перед тем как создать её.

Обратите внимание, папки создались внутри downloads, потому что наша программа находится именно в ней (6 строчка кода) в момент создания папок.

Наводим порядок в этом хламе.

Скопируйте себе репл ниже. В нём мы постарались собрать самый отборный хлам и разнообразные файлы, чтобы папка downloads была максимально похожа на ту, что обычно бывает на компьютерах).

При запуске, на экране мы увидим список всех файлов и папок, содержащихся в директории downloads. Взгляните внимательно на них и постарайтесь ответить на вопрос. Как отличить где папка, а где файл?

Вполне логичным ответом напрашивается тот факт, что у файлов есть расширения, такие как mp3, txt, pdf и прочее, а значит наличие точки в названии говорит нам о том, что это файл. Это суждение не совсем верно. Файлы действительно имеют свой формат, и расширение в конце имени файла всего лишь подсказывает нам в каком формате записаны данные. Но точка так же может присутствовать и в имени папки, при этом это не сделает её файлом. Папка как была папкой, так и останется.

Функция однозначно определяющая файл носит название isfile() и находится в модуле path библиотеки os. Выведите на экран только названия файлов (15 строка).

Теперь создадим правило определяющее порядок сортировки файлов.

  • Файлы с расширением mp3 помещаем в music
  • Файлы с расширением pdf или txt помещаем в docs
  • Файлы с расширением jpg или png помещаем в images

Чтобы определить расширение файла, воспользуемся методом split('.') у строк, отделив расширение от имени файла. А для перемещения объекта воспользуемся методом move() из библиотеки shutil. Не забудьте импортировать данную библиотеку.

Осталось только добавить правила для оставшихся файлов, чтобы распределить их по папкам.

После того как закончите, переходите к следующему уроку.