2013-12-04 2 views
1

Здесь я использую код в Python, какУскорить shutil.copy в питона

if option2 == 1: 
     try: 
      global option2, Nimages 

      for sur in fm_path: 
       shutil.copy(sur,file1) # here how to speed up the copy function 

      option2 = 0 
     except shutil.Error as e: 
      print('Error: %s' % e) 

При выполнении этого. если я копирую длинный файл, потребовалось слишком много времени для копирования. Любое предложение сократить время?

+0

Это медленнее, чем при копировании одного файла из командной строки? Сколько? – Edu

+0

если я использую ctr + c и v его немного быстрее, если сравнить с этим ...! Я использую linux mint –

+0

Я предлагаю провести еще более тщательные тесты на скорости, прежде чем принимать результаты. Часто на копирование в значительной степени влияют источники кеширования или даже задержка написания копий, поэтому для получения твердых результатов вы должны копировать намного больше, чем должны помещаться в кэши (то есть лучше всего сравнить это с гигабайтами данных). – Alfe

ответ

6

Если вы имеете дело с файлами большого размера, вы можете попытаться сделать файл открытым/писать как копию. Как указано в Faster Python File Copy, размер буфера по умолчанию в shutil.copyfileobj (который является реальной функцией, выполняющей копию файла в shutil) составляет 16 * 1024, 16384. Тогда вы можете использовать больший размер буфера.

еи

with open(src, 'rb') as fin: 
    with open(dst, 'wb') as fout: 
     shutil.copyfileobj(fin, fout, 128*1024) 
+0

вот что такое 'rb' и 'wb. bcz Я назначил только источник и пункт назначения. Еще я должен определить, что rb и wb? он встроен? –

+0

'rb' означает 'read binary'; 'wb' означает 'write binary'. Оба являются просто строками. Вы должны проверить помощь 'open'. – Drake

+0

Посмотрите мой код выше, после цикла, который я вложил, но не работает. Он показывает ошибку каталога в fout. Я копирую файл изображения в один каталог [Папка]. Я думаю, что код ur предназначен для работы файла с файлом. , .После проверки и уточнения ... –