шутил и копирование файлов - PullRequest
2 голосов
/ 13 февраля 2012

У меня большой набор данных изображений (около 3000 файлов).Моя проблема проста, я хочу скопировать случайно выбранные файлы изображений в другое место назначения.Я использую random.sample, чтобы выбрать пятьсот изображений и сохранить их имена в списке.Теперь я хочу скопировать файлы из папки src в папку назначения, если их имя существует в списке (и, следовательно, выбрано случайным образом).

Однако следующий код копирует ВСЕ файлы в папке, независимо от тогоимена появляются в случайно выбранном списке.помощь

import os.path
import os
import glob
import random
import shutil


dirfiles = os.listdir("/media/Data/Leaves/Leaves")
myfiles = []
myfiles.append(random.sample(dirfiles,500))


print myfiles


final_list=myfiles[0]
print final_list
count=0

for elem in final_list:
    print elem
    count= count+1

print count


src = '/home/mjanja/Desktop/Leaves'
dst = '/home/mjanja/Desktop/Positive Leaves'
for filename in final_list:
    for file in glob.glob( os.path.join(src,filename)):
        shutil.copy(file,dst)

print "Copied file!!" +infile

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

В этом случае вы используете glob.glob, где возникает опасность.Это возвращает итератор всех файлов, которые соответствуют шаблону, который вы предоставляете.Вы создаете список из 500 конкретных файлов, но затем сравниваете по шаблону ... в зависимости от того, какие символы находятся в вашем имени файла, это может дать вам удивительные результаты, так как шаблон вполне может соответствовать большему количеству файлов, чем ваш исходный 500.

Вы также делаете некоторые шаги без необходимости и можете обернуть все это в функцию:

import os
import random
import shutil

def copy_sample(src, dst, size=500):
    files = [os.path.join(src, i) for i in random.sample(os.listdir(src), size)]
    count = len(files)
    for index, afile in enumerate(files):
        try:
           shutil.copy(afile, dst)
           print 'Copied file %s (%d/%d)' % (afile, index + 1, count)
        except Exception, msg:
           print 'Failed file %s (%d/%d) -- %s' % (afile, index + 1, count, msg)

src = '/home/mjanja/Desktop/Leaves'
dst = '/home/mjanja/Desktop/Positive Leaves'

copy_sample(src, dst)
3 голосов
/ 13 февраля 2012

Вы делаете несколько слишком сложных вещей, таких как подсчет элементов и определение каталогов в разных местах.

Как насчет этого?

import os
import random
import shutil

src = '/home/mjanja/Desktop/Leaves'
dst = '/home/mjanja/Desktop/Positive Leaves'

dirfiles = os.listdir(src)
myfiles = random.sample(dirfiles, 500)
count = len(myfiles)

for filename in myfiles:
    shutil.copy(os.path.join(src, filename), dst)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...