Время прочтения: 2 мин.
или осваиваем работу с файловой системой на 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)
Вот и всё. Простейший скрипт-перекладчик готов. Теперь он раз в минуту будет сортировать по расширению и перемещать файлы в определённые папки.
Просторы для развития этого скрипта достаточно большие. Например, можно с помощью регулярных выражений осуществлять сортировку файлов не по расширению, а по названию и более грамотно раскладывать их по папкам, но это уже тема для отдельной статьи по регулярным выражениям.