Перемещение только одного файла из каждого подкаталога в новые подкаталоги - PullRequest
0 голосов
/ 11 июля 2019

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

enter image description here

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

enter image description here

Я пытался использовать os.walk для выбора первого файла каждого подкаталога, но я все еще не знаю, как переместить его в другой подкаталог с тем же именем

path = './test/'
new_path = './x/'

n = 1
fext = ".png"

for dirpath, dirnames, filenames in os.walk(path): 
    for filename in [f for f in filenames if f.endswith(fext)][:n]:
        print(filename) #this only print the file name in each sub dir

Ожидаемый результат можно увидеть на изображении выше

1 Ответ

0 голосов
/ 11 июля 2019

Вы почти у цели:)

Все, что вам нужно, это иметь полный путь к файлу: старый путь (существующий файл) и новый путь (куда вы хотите его переместить).

Как уже упоминалось в этой записи , вы можете перемещать файлы различными способами в Python.Вы можете использовать "os.rename" или "shutil.move".

Вот полный протестированный пример кода:

import os, shutil

path = './test/'
new_path = './x/'

n = 1
fext = ".png"

for dirpath, dirnames, filenames in os.walk(path): 
    for filename in [f for f in filenames if f.endswith(fext)][:n]:
        print(filename) #this only print the file name in each sub dir

        filenameFull = os.path.join(dirpath, filename)
        new_filenameFull = os.path.join(new_path, filename)

        # if new directory doesn't exist - you create it recursively
        if not os.path.exists(new_path):
            os.makedirs(new_path)        

        # Use "os.rename"
        #os.rename(filenameFull, new_filenameFull)

        # or use "shutil.move"
        shutil.move(filenameFull, new_filenameFull)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...