【发布时间】:2016-11-22 14:18:25
【问题描述】:
我有一些关于在 Python 中设置最长运行时间的问题。事实上,我想使用 pdfminer 将 PDF 文件转换为 .txt。问题是很多时候,一些文件无法解码并且需要很长时间。所以我想设置time.time() 将每个文件的转换时间限制为20秒。另外,我是在windows下运行的,所以无法使用信号功能。
我成功地使用pdfminer.convert_pdf_to_txt() 运行转换代码(在我的代码中它是“c”),但我无法将time.time() 集成到while 循环中。在我看来,在下面的代码中,while 循环和time.time() 不起作用。
总之,我想:
-
将 PDf 文件转换为 .txt 文件
-
每次转换的时间限制为 20 秒。如果超时,抛出异常并保存一个空文件
-
将所有txt文件保存在同一个文件夹下
-
如果有任何异常/错误,仍然保存文件,但内容为空。
这是当前代码:
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("")
【问题讨论】:
-
@Stormvirux 是的,我在完成上述代码之前阅读了这篇文章......我仍然无法弄清楚如何集成到我的代码中;(
-
@SXC88 - 刚刚完成我的回答,希望对您有所帮助!
-
没有任何版本可以工作,因为这里没有任何东西会中断持续时间超过 20 秒的转换。
-
@pvg - 你是什么意思?
标签: python while-loop time-limiting