Копировать файлы из нескольких определенных подпапок в Python - PullRequest
0 голосов
/ 14 января 2019

В пути к файлу D: / src у меня есть папки с изображениями и их подпапки, которые имеют следующую структуру:

Folder A
- Subfolder a
- Subfolder b
- Subfolder c
Folder B
- Subfolder a
- Subfolder b
- Subfolder c
- Subfolder d
Folder C
- Subfolder a
- Subfolder b
- Subfolder c
...

Я хочу скопировать все файлы .jpg в подпапке b из папки A, B, C и т. Д. В новую папку подпапки b в D: / dst. Как я могу сделать это в Python? Спасибо.

Subfolder b
-xxx.jpg
-xyx.jpg
-yxz.jpg
...

Вот то, что я нашел по следующей ссылке, может помочь:

Копирование определенных файлов из одной папки в другую, используя python

import os;
import shutil;
import glob;

source="C:/Users/X/Pictures/test/Z.jpg"
dest="C:/Users/Public/Image"

    if os.path.exists(dest):
    print("this folder exit in this dir")
else:
    dir = os.mkdir(dest)

for file in glob._iglob(os.path.join(source),""):
    shutil.copy(file,dest)
    print("done")

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Если у вас есть 2 уровня вложенности

root_dir = './data'
dest_dir = './new_location'
os.listdir(root_dir)

for folder in os.listdir(root_dir):
    folder_path = os.path.join(root_dir, folder)
    if os.path.isdir(folder_path):
        for subfolder in os.listdir(folder_path):
            if subfolder == 'Subfolder B':
                subfolder_path = os.path.join(root_dir, folder, subfolder)
                print(subfolder_path)
                for filename in os.listdir(subfolder_path):
                    file_path = os.path.join(root_dir, folder, subfolder, filename)
                    dest_path = os.path.join(dest_dir, filename)
                    shutil.copy(file_path, dest_path)
                    print("Copied ", file_path, "to", dest_path)

Вам просто нужно 2 для циклов, а во внутреннем цикле for вы просто проверяете, соответствует ли имя папки Subfolder B. Если это так, скопируйте все файлы из этого каталога в папку назначения.

0 голосов
/ 14 января 2019

Вот короткий сценарий, который должен сделать всю работу ...

import os

# list all the directories in current directory
dirs = [x[0] for x in os.walk("D:/src")]

for d in dirs:
    ## list all files in A/b/*, B/b/*, C/b/*...
    files_to_copy = os.listdir(os.path.join(d, "b"))  
    for f in files_to_copy:
        if f.endswith(".jpg"):  ## copy the relevant files to dest
            shutil.copy(os.path.join(d, "b", f), os.path.join(dest, f))
0 голосов
/ 14 января 2019

Попробуйте это

import os
from os.path import join, isfile

BASE_PATH = 'd:/test'
SUBFOLDER = 'Subfolder b'

for folder, subfolders, *_ in os.walk(BASE_PATH):
    if SUBFOLDER in subfolders:
        full_path = join(BASE_PATH, folder, SUBFOLDER)
        files = [f for f in os.listdir(full_path) if isfile(join(full_path, f)) and f.lower().endswith(('.jpg', '.jpeg'))]
        for f in files:
            file_path = join(full_path, f)
            print (f'Copy {f} somewehere')
...