У меня есть некоторые вопросы, связанные с установкой максимального времени работы в python. На самом деле, я хотел бы использовать pdfminer для преобразования файлов PDF в .txt. Проблема в том, что очень часто некоторые файлы невозможно декодировать и занимать очень много времени. Поэтому я хочу установить time.time()
, чтобы ограничить время преобразования для каждого файла до 20 секунд. Кроме того, я запускаю под окнами, поэтому я не могу использовать функцию сигнала.ограничение настройки питона для времени работы с циклом while
Мне удалось запустить код преобразования с pdfminer.convert_pdf_to_txt()
(в моем коде это «c»), но я не смог интегрировать time.time()
в цикл while. Мне кажется, что в следующем коде цикл while и time.time()
не работают.
В заключение, я хочу:
конвертировать PDF в TXT
ограничение по времени для каждого преобразования в 20 сек, если он работает вне времени, бросить excepetion и сохранить пустой файл
сохранить все файлы тхт под одной и той же папке
, если есть какие-либо исключения/ошибки, по-прежнему сохранить файл, но с пустым контентом.
Вот текущий код:
import converter as c
import os
import timeit
import time
yourpath = 'D:/hh/'
for root, dirs, files in os.walk(yourpath, topdown=False):
for name in files:
t_end = time.time() +20
try:
while time.time() < t_end:
c.convert_pdf_to_txt(os.path.join(root, name))
t=os.path.split(os.path.dirname(os.path.join(root, name)))[1]
a=str(os.path.split(os.path.dirname(os.path.join(root, name)))[0])
g=str(a.split("\\")[1])
with open("D:/f/"+g+"&"+t+"&"+name+".txt", mode="w") as newfile:
newfile.write(c.convert_pdf_to_txt(os.path.join(root, name)))
print "yes"
if time.time() > t_end:
print "no"
with open("D:/f/"+g+"&"+t+"&"+name+".txt", mode="w") as newfile:
newfile.write("")
except KeyboardInterrupt:
raise
except:
for name in files:
t=os.path.split(os.path.dirname(os.path.join(root, name)))[1]
a=str(os.path.split(os.path.dirname(os.path.join(root, name)))[0])
g=str(a.split("\\")[1])
with open("D:/f/"+g+"&"+t+"&"+name+".txt", mode="w") as newfile:
newfile.write("")
полезная ссылка. http://stackoverflow.com/questions/13293269/how-would-i-stop-a-while-loop-after-n-amount-of-time – Stormvirux
@Stormvirux Да, я прочитал это сообщение, прежде чем завершить вышеуказанный код .. Я все еще не мог понять, как интегрироваться в мой код: ( – SXC88
@ SXC88 - Я только что закончил свой ответ, надеюсь, что это поможет! – linusg