Перемещение некоторых файлов из подпапки в другую подпапку в Python - PullRequest
0 голосов
/ 12 июля 2020

Я попытался переместить 3 файла из каждой подпапки каталога A в каждую из пустых подпапок каталога B с тем же именем, что и подкаталог A. Я сделал код, но файлы копируются во все подпапки. Здесь я покажу вам пример и код, которые я написал. Может ли кто-нибудь помочь мне решить эту проблему? Спасибо

For example I have folder A and B. I want to move 3 files from directory of A into the same name from subfolder directory A into directory B:

directory A:
- Subfolder 1:
 - img_1.jpg
 - img_2.jpg
 - img_3.jpg
 - img_4.jpg
- Subfolder 2:
 - img_5.jpg
 - img_6.jpg
 - img_7.jpg
 - img_8.jpg

directory B:
- Subfolder 1:
 - empty
- Subfolder 2:
 - empty

Expected Output
directory A:
- Subfolder 1:
 - img_1.jpg
 
- Subfolder 2:
 - img_5.jpg
 

directory B:
- Subfolder 1:
 - img_2.jpg
 - img_3.jpg
 - img_4.jpg
- Subfolder 2:
 - img_6.jpg
 - img_7.jpg
 - img_8.jpg

А это код, который я пишу

path = 'path_A/'

directory = 'path_B/'

for root, dirs, files in os.walk(path):
    dirs.sort(key=int)
    k = os.path.basename(root)
    if files == []:
        continue
        
    i = 0

    select = len(files) - 2 #select 1 files
                            
    for root2, dirs2, files2 in os.walk(directory):
        for i,file in enumerate(files):
        #print(file)
            if i <= select:
                print(file)
                shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, root2), file))

1 Ответ

0 голосов
/ 12 июля 2020

Предоставленный код вообще не работал в моей системе. Я переделал его так, чтобы было перемещено по три файла из каждой из двух подпапок каталога A.

shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, root2), file))

В вызове shutil.move вы перемещали файлы в root2, root расположение каталога B. Заменяя root2 на подпапку (переменная k), он правильно копирует его в подпапки каталога B. снова, вызывая исключение, поскольку файлы из каталога A уже были бы перемещены.

for root2, dirs2, files2 in os.walk(directory):

Я приложил рабочий код. Если вы хотите, чтобы все файлы в каждой подпапке копировались, удалите -1 при назначении select.

import os
import shutil

path = 'C:\\Users\\alex\\PycharmProjects\\test\\directoryA'

directory = 'C:\\Users\\alex\\PycharmProjects\\test\\directoryB'

for root, dirs, files in os.walk(path):
    dirs.sort()
    k = os.path.basename(root)
    if files == []:
        continue

    i = 0

    select = len(files) - 1  # select 1 files

    if not os.path.exists(os.path.join(directory, k)):  # Check to see if the directory exists
        os.mkdir(os.path.join(directory, k))

    for i, file in enumerate(sorted(files)):
        # print(file)
        if i < select:
            print(file)
            shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, k), file))
...