Создаем перекладчик файлов с помощью Python

Существует множество задач, которые можно автоматизировать с помощью программирования. Мы поможем решить одну из них – привести в порядок рабочий стол вашего ПК.

Когда на рабочем столе скапливается большое количество самых разных файлов, начиная с каких-либо рабочих документов и заканчивая фотографиями любимого кота, то рано или поздно приходит момент, когда приходится всё это разбирать и расфасовывать по разным папкам. Чтобы не делать это руками, можно написать небольшой скрипт, который будет за нас отправлять «мух» налево, а «котлеты» направо.

Все необходимые для работы с файловой системой функции находятся в модулях os и shutil. Также нам ещё понадобится функция sleep из модуля time. Напишем небольшой каркас нашего скрипта.

# Импорт всех необходимых модулей import shutil import os from time import sleep # Папки из которой и в которую будет происходить перемещение moveFrom = "C:\\...\\\\moveFrom" moveTo = "C:\\\\...\\\\moveTo" # Заглушка функции, которая будет перемещать файлы def moveFiles(): pass # Главный цикл скрипта if __name__ == "__main__": while True: moveFiles() sleep(60)

Теперь разберёмся с тем, какие функции нам понадобятся для осуществления задуманного.

Первая — это listdir из модуля os. Она принимает строку, которая содержит путь до папки и возвращает список со всеми файлами из этой папки.

Вторая необходимая функция — это move из модуля shuti. Она принимает путь до файла, который нужно переместить, и путь, по которому нужно этот файл переместить. Также желательно указать функцию, с помощью которой будет происходить копирование.

Далее приведён листинг функции копирования файлов.

def moveFiles(): # Получение списка файлов, которые нужно переместить needToMove = os.listdir(moveFrom) # Если таких нет, то завершается выполнение функции if len(needToMove) == 0: return # Проход по каждому из файлов for file in needToMove: # Выделение расширения файла fExt = file[file.rfind('.')+1:] # Попытка переместить файл try: shutil.move(moveFrom + "\\\\" + file, moveTo + "\\\\" + fExt + "\\\\" + file, copy_function=shutil.copy2) except FileNotFoundError: # Если попытка не удалась по причине отсутствия папки, то она создаётся и перемещение повторяется dirPath = os.path.join(moveTo, fExt) os.mkdir(dirPath) shutil.move(moveFrom + "\\\\" + file, moveTo + "\\\\" + fExt + "\\\\" + file, copy_function=shutil.copy2)

Вот и всё. Простейший скрипт-перекладчик готов. Теперь он раз в минуту будет сортировать по расширению и перемещать файлы в определённые папки.

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

Начать дискуссию