Переместить файлы из одного каталога в три отдельные папки последовательно — Python

Здесь пользователь Python знакомится с основами библиотек os/shutil.

Я пытаюсь последовательно перемещать файлы из одной папки каталога (Test) в три отдельные папки (01-Folder, 02-Folder и 03-Folder). Это означает, что первый файл в каталоге помещается в папку 01, второй файл помещается в папку 02, а третий файл помещается в папку 03. Отсюда и далее (независимо от того, есть ли в тесте 5 или 1000 файлов), процесс повторяется, где 4 возвращаются в папку 01, 5 переходят в папку 02, 6 в папку 03, 7 в папку 01, 8 в папку 02. , 9 в 03 - и так далее.

Эти три папки могут быть размещены в исходном каталоге или снаружи. Ключ здесь как раз в порядке — их нужно тянуть в какую-то упорядоченную петлю.

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

import os
import shutil

# Original folder
original = ('C:\\Users\\Vision3\\Desktop\\Test') 

# Destination folders
path1 = ('C:\\Users\\Vision3\\Desktop\\01-Folder')
path2 = ('C:\\Users\\Vision3\\Desktop\\02-Folder')
path3 = ('C:\\Users\\Vision3\\Desktop\\03-Folder')

# Traverse original
for root, subdirs, files, in os.walk(original):
    for file in files:
        # Select the first three files? Grey area here ...
        for x in range(0,2):
            # Move these first three files to 01-Folder?
            shutil.move(x, path1)

person developerthatdoesthings    schedule 23.01.2018    source источник


Ответы (1)


Вы можете установить путь назначения к словарю, а затем использовать эту логику.

import os
import shutil  

path = "C:\\Users\\USERNAME\\Desktop\\A\\"
path1 = 'C:\\Users\\USERNAME\\Desktop\\01-Folder'
path2 = 'C:\\Users\\USERNAME\\Desktop\\02-Folder'
path3 = 'C:\\Users\\USERNAME\\Desktop\\03-Folder'

d = {1: path1, 2: path2, 3: path3}
c = 1
for root, dirnames, filenames in os.walk(path):
    for filename in filenames:
        filePathVal =  os.path.join(root, filename)
        shutil.move(filePathVal, d[c])
        c += 1
        if c > 3:
            c = 1

Примечание. Протестировано в python2.7

person Rakesh    schedule 23.01.2018
comment
Спасибо, не подумал бы об этом. Ваше здоровье! - person developerthatdoesthings; 23.01.2018
comment
Привет, Ракеш: Можете ли вы также объяснить, как вы будете последовательно переименовывать каждый файл в каждой папке? Таким образом, не просто разделяя папки, а переименовывая каждую по порядку, как только они достигают своих папок назначения. - person developerthatdoesthings; 29.01.2018