Помещение
Я пытаюсь преобразовать PDF-файл в изображения с помощью pdf2image и poppler, чтобы затем запустить некоторые задачи компьютерного зрения.
Само преобразование работает нормально.
Однако преобразование создает некоторые артефакты для каждой страницы PDF-файла во время его преобразования, которые я хотел бы удалить в конце функции. Чтобы облегчить это, я использую tempfile.TemporaryDirectory(). Функция выглядит следующим образом:
с tempfile.TemporaryDirectory() в качестве пути: images_from_path: [Изображение] = Convert_from_path( os.path.join(path_superfolder, «калибровка_цель.pdf»), размер=(2480, 3508), выходная_папка=путь, poppler_path=r'E:\poppler-22.04.0\Library\bin') если len(images_from_path) >= страница: images_from_path[страница - 1].save(os.path.join(path_superfolder, "result.jpg")) Проблема Проблема в том, что программа всегда вылетает со следующими ошибками, после преобразования PDF и записи нужного изображения в файл.
Traceback (самый последний вызов — последний): Файл «C:\Python310\lib\shutil.py», строка 617, в _rmtree_unsafe. os.unlink(полное имя) PermissionError: [WinError 32] Процесс не может получить доступ к файлу, поскольку он используется другим процессом: 'C:\\Users\\tobia\\AppData\\Local\\Temp\\tmp24c4bmzv\\bd76d834-672e-49fc -ac30-7751b7b660d0-01.ppm' Во время обработки вышеуказанного исключения произошло другое исключение: Traceback (последний вызов последний): Файл «C:\Python310\lib\tempfile.py», строка 843, в ошибке _os.unlink(путь) PermissionError: [WinError 32] Процесс не может получить доступ к файлу, поскольку он используется другим процессом: 'C:\\Users\\tobia\\AppData\\Local\\Temp\\tmp24c4bmzv\\bd76d834-672e-49fc -ac30-7751b7b660d0-01.ppm' Во время обработки вышеуказанного исключения произошло другое исключение: Traceback (последний вызов последний): Файл «C:\Python310\lib\code.py», строка 90, в коде выполнения exec(код, self.locals) Файл «», строка 1, в Файл «E:\PyCharm 2022.2.3\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py», строка 198, в файле выполнения pydev_imports.execfile(filename, global_vars, local_vars) # выполняем скрипт Файл «E:\PyCharm 2022.2.3\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py», строка 18, в execfile exec(compile(contents+"\n", file, 'exec'), glob, loc) Файл «D:\Dokumente\Uni\Informatik\BA_Thesis\tumexam-scheduling-codebase\generate_data.py», строка 393, в экстракт_калибровка_страница_as_image_from_pdf() Файл «D:\Dokumente\Uni\Informatik\BA_Thesis\tumexam-scheduling-codebase\generate_data.py», строка 190, в экстракте_калибровки_страницы_as_image_from_pdf tmp_dir.cleanup() Файл "C:\Python310\lib\tempfile.py", строка 873, в очистке self._rmtree(self.name, ignore_errors=self._ignore_cleanup_errors) Файл «C:\Python310\lib\tempfile.py», строка 855, в _rmtree _shutil.rmtree(имя, ошибка=ошибка) Файл «C:\Python310\lib\shutil.py», строка 749, в rmtree вернуть _rmtree_unsafe (путь, ошибка) Файл «C:\Python310\lib\shutil.py», строка 619, в _rmtree_unsafe onerror(os.unlink, полное имя, sys.exc_info()) Файл «C:\Python310\lib\tempfile.py», строка 846, в ошибке cls._rmtree(путь, ignore_errors=ignore_errors) Файл «C:\Python310\lib\tempfile.py», строка 855, в _rmtree _shutil.rmtree(имя, ошибка=ошибка) Файл «C:\Python310\lib\shutil.py», строка 749, в rmtree вернуть _rmtree_unsafe (путь, ошибка) Файл «C:\Python310\lib\shutil.py», строка 600, в _rmtree_unsafe onerror(os.scandir, путь, sys.exc_info()) Файл «C:\Python310\lib\shutil.py», строка 597, в _rmtree_unsafe с os.scandir(path) как scandir_it: NotADirectoryError: [WinError 267] Недопустимое имя каталога: 'C:\\Users\\tobia\\AppData\\Local\\Temp\\tmp24c4bmzv\\bd76d834-672e-49fc-ac30-7751b7b660d0-01.ppm' При выполнении процедуры очистки все выглядит нормально, путь указан правильно, и файлы начинают удаляться, пока в какой-то момент внутренняя переменная пути не перепутается и процедура не выйдет из строя, поскольку очевидно, что файл не является каталогом. Мне кажется, что здесь проблемы вызывает состояние гонки.
То, что я уже пробовал [*]Переписать функцию так, чтобы она не использовалась с и вместо этого явно вызывала подпрограмму с помощью tmp_dir.cleanup() [*]Просто создаем каталог, не заполняя его артефактами преобразования. В этом случае очистка работает. [*]В документации к временному файлу упоминается Ошибки разрешений, возникающие при открытии файлов. Однако файлы используются только в этой функции, и если это является причиной ошибки, я не уверен, где файлы все еще открываются или какая функция вызывает это. Я, конечно, подозреваю, что это функция преобразования.
Очистка tempfile.TemporaryDirectory() Python завершается сбоем с PermissionError и NotADirectoryError. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
В чем разница между «mmap.mmap» и «tempfile.SpooledTemporaryFile» в stdlib Python?
Anonymous » » в форуме Python - 0 Ответы
- 46 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Python Tempfile -SpooltemporaryFile написать в Gzip, не писая на диск, где это возможно?
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-