У меня есть группа файлов .pdf, из которых я создал изображения .tiff. Файлы .pdf называются «Install_Form_XXXXXX.pdf», а последующие файлы .tiff - «Install_Form_XXXXXX_1.tiff». В некоторых случаях .pdf может иметь две страницы, и в этом случае создается второй файл «Install_Form_XXXXXX_2.tiff».
Поэтому я перебираю список файлов «Install_Form_XXXXXX_X.tiff» и использую PIL и Numpy для объединения изображений по горизонтали. Это прекрасно работает, используя цикл в моем коде ниже, но затем мне нужно переименовать новый «комбинированный_XXXXXX.tiff» в исходное имя «Install_Form_XXXXXX_1.tiff» и перезаписать его.
Мой цикл неправильно закрывает два открытых изображения перед запуском shutil.move () в последней строке цикла. Итак, я получаю сообщение об ошибке ниже, которое показывает ошибку разрешения и «Не удается создать файл, когда этот файл уже существует». Однако, если я переместлю последнюю строку за пределы цикла и вручную укажу путь к файлу и имена, я смогу переместить новый комбинированный .tiff, чтобы перезаписать существующий.
Как правильно закрыть эти изображения в цикле, чтобы разрешить переименовывать объединенный .tiff в "Install_Form_XXXXXX_1.tiff"?
Я удалил ссылки на пути к файлам из своего кода для удобства просмотра. Код конкатенации изображения взят из этого предыдущего ответа .
Мой код:
import numpy as np
from PIL import Image
from shutil import move
install_list = ['166292']
for x in install_list:
install_form_1 = "Install_Form_%s_1.tiff" % (x)
install_form_2 = "Install_Form_%s_2.tiff" % (x)
combined_form = 'combined_%s.tiff' % (x)
list_im = [install_form_1, install_form_2]
imgs = [ Image.open(i) for i in list_im ]
min_shape = sorted( [(np.sum(i.size), i.size ) for i in imgs])[0][1]
imgs_comb = np.hstack( (np.asarray( i.resize(min_shape) ) for i in imgs ))
imgs_comb = Image.fromarray(imgs_comb)
imgs_comb.save(combined_form)
move(combined_form, install_form_1)
Сообщение об ошибке из кода:
(base) C:\Combine_Images.py
imgs_comb = np.hstack( (np.asarray( i.resize(min_shape) ) for i in imgs ) )
Traceback (most recent call last):
File "C:\lib\shutil.py", line 563, in move
os.rename(src, real_dst)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:\\combined_166292.tiff' -> 'C:\\Install_Form_166292_1.tiff'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:/Combine_Images.py", line 43, in <module>
move(filepath + combined_form, filepath + install_form_1)
File "C:\lib\shutil.py", line 577, in move
copy_function(src, real_dst)
File "C:\lib\shutil.py", line 263, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "C:\lib\shutil.py", line 121, in copyfile
with open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: 'C:\\Install_Form_166292_1.tiff'