Как разделить большую папку на несколько маленьких?

У меня есть папка с примерно 100,000 файлами. Мне нужно создать кучу папок и поместить в них по 5,000 файлов. Как я могу это сделать?


Ответы (1 шт):

Автор решения: Gh0sTG0

Вот код, если чего не понятно спрашивай:

import os
from math import ceil, floor

folder_address = "адрес_до_папки" # адрес папки, добывай как тебе удобно
directory = os.fsencode(folder_address)
i = 0
files_in_folder = 5000 # меняешь 5000 на любое число сколько файлов в папке тебе надо

num_of_files = len([name for name in os.listdir(directory) if os.path.isfile(os.path.join(directory, name))]) # работать будет чисто с файлами, вычислил их количество в папке, игнорирую наличие каких либо папок
for x in range(ceil(num_of_files / files_in_folder)): 
    path = folder_address + "\\" + str(x + 1) # папки будут называться цифрами, от 1 до количество файлов / 5000 с округлением в большую сторону
    if not os.path.exists(path):
        os.mkdir(path)

files = (file for file in os.listdir(directory)
        if os.path.isfile(os.path.join(directory, file))) # собственно, я получил адреса всех файлов
for file in files:
    # print("Делаю файл № " + str(i + 1)) # если хочешь спам сообщениями разкомментируй
    file_name = os.fsdecode(file)
    file_path = os.path.join(folder_address, file_name)
    new_file_path = os.path.join(folder_address, str(floor(i / files_in_folder) + 1), file_name)
    os.rename(file_path, new_file_path)
    i += 1
print("Creating Done!")
→ Ссылка