Как скопировать 700 файлов + 80 файлов в два разных каталога из одного источника, используя цикл в Python? - PullRequest
0 голосов
/ 12 ноября 2019

Я хочу скопировать, 700 файлов в папке Train и 80 файлов в папке Test из исходной папки Z (Z имеет 780 файлов). Можете ли вы решить эти проблемы с помощью петель, заранее спасибо

Я пытался использовать этот код:


sourceImage = "D:/DeveloperWorld/a-zDatasets"

train_folder = "D:/CheckFolder/train"
test_folder = "D:/CheckFolder/test"

src_files = os.listdir(sourceImage)

length = len(src_files)
for f in src_files:
    full_file_name = os.path.join(sourceImage, f)
    for i in range(0,700):
        shutil.copy(full_file_name, train_folder)
        break
    for i in range(700,780):    
        shutil.copy(full_file_name, test_folder)
        break

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

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

Похоже, вы уже получаете список файлов из переменной src_files. Попробуйте это.

sourceImage = "D:/DeveloperWorld/a-zDatasets"

train_folder = "D:/CheckFolder/train"
test_folder = "D:/CheckFolder/test"

src_files = os.listdir(sourceImage)

length = len(src_files)
for idx, f in enumerate(src_files):
    full_file_name = os.path.join(sourceImage, f)

    if idx <= 700:
        shutil.copy(full_file_name, train_folder)
    else:
        shutil.copy(full_file_name, test_folder)

Функция перечисления дает индекс.

0 голосов
/ 12 ноября 2019

Это команда оболочки

cp -r path/to/A/* path/to/Z/

Это означает

рекурсивное копирование всего содержимого источника A (уведомление *) в место назначения Z

Вы можете использовать os для выполнения команд оболочки в вашем коде Python

import os 
os.system("cp -r path/to/A/* path/to/Z/")
os.system("cp -r path/to/B/* path/to/Z/")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...