Эффективно перемещать большое количество файлов в другую структуру папок - PullRequest
2 голосов
/ 14 апреля 2020

Я пытаюсь реорганизовать большое количество файлов PDF (3 миллиона файлов, средний размер файла 300 КБ). В настоящее время файлы хранятся в произвольно названных папках, но я хочу упорядочить их по имени файла. Имена файлов имеют целые числа 8-ди git, например, 12345678.pdf

. В настоящее время файлы хранятся следующим образом

/old/a/12345678.pdf 
/old/a/12345679.pdf 
/old/b/22345679.pdf

Я хочу, чтобы они сохранялись следующим образом

/new/12/345/12345678.pdf
/new/12/345/12345679.pdf
/new/22/345/22345679.pdf

Я подумал, что это простая задача с использованием shutil:

from pathlib import Path
import shutil

for path_old in Path('old').rglob('*.pdf'):
   r = int(path_old.stem)
   path_new = '/new/'+str(r// 1000**2)+'/'+str(r // 1000 % 1000)+'/'+path_old.name
   shutil.move(str(path_old),path_new)

К сожалению, это занимает вечность. Мой сценарий перемещает только ~ 15 файлов в секунду, что означает, что для его завершения потребуются дни.

Я не совсем уверен, является ли это проблемой Python / shutil или более общей проблемой ввода-вывода - извините, если я поставил вопрос не на место. Я открыт для любого типа решения, которое делает этот процесс быстрее.

...