В этом случае вы используете 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)