Время прочтения: 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)

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

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