首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:为什么打开XFA文件比相同大小的txt文件花费更长的时间?

Python:为什么打开XFA文件比相同大小的txt文件花费更长的时间?
EN

Stack Overflow用户
提问于 2021-03-20 04:52:33
回答 1查看 137关注 0票数 0

我目前正在开发一些python代码,以从14000 pdfs (每pdf 7 Mb )中提取数据。它们是由Adobe设计器11.0生成的动态XFA,因此它们包含需要稍后解码的流(因此,如果有任何区别的话,还有一些非ascii字符)。

我的问题是,对这些文件调用open()需要大约1秒的时间(如果不是更长的话)。

我对通过复制粘贴字符创建的13 to文本文件进行了相同的操作,它们的打开时间不到0.01秒。当我用()打开动态pdfs时,这一次的增长从何而来?我能避免这个瓶颈吗?

我用cProfile得到了这样的时间:

代码语言:javascript
复制
from cProfile import Profile
profiler = Profile()
profiler.enable()
f = open('test.pdf', 'rb')
f.close()
profiler.disable()
profiler.print_stats('tottime')

对于给定的xfa,print_stats的结果如下:io.open()只需1秒执行一次

附加信息:我注意到,当在最后15或30分钟内打开相同的pdf文件时,打开时间大约快了10倍,即使我删除了项目中的__pycache__目录。一个可以使这种速度提高的解决方案,无论经过多少时间,都是值得的,尽管我的pc上只剩下50 Gb。同时,对pdfs的并行处理也不是一个选项,因为我只有一个空闲的核心来运行我的实现.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-20 06:01:57

要解决这个问题,您可以执行以下操作之一:

  • 指定文件/目录/扩展名以从Windows Defender设置中排除(不进行实时扫描)
  • 从Windows暂时关闭real time protection
  • 以编码格式保存这些文件,在这种格式中,Windows Defender无法检测到其他文件/网站的链接,并在读取时对它们进行解码。(我还没有试过)

正如"user2357112支持莫妮卡“在评论中所说的那样,罪魁祸首是反病毒软件在向python提供文件之前扫描这些文件。

我能够通过在打开任务管理器时调用文件列表上的open()来验证这一点。Python使用了几乎0%的CPU,而Service antivirus Microsoft Defender正在使我的一个核心变得最大。

我将结果与我的脚本的另一次运行进行了比较,在脚本中,我多次打开同一个文件,python在反病毒保持在0%的情况下使内核变得强大。

我试图运行一个单一的pdf文件2次快速扫描与Windows维护者.第一次执行导致在1秒内扫描800个文件(因此open()执行延迟了1秒),第二次扫描立即导致一个扫描文件。

Explication:

Windows Defender扫描所有写在文件夹中的文件/互联网链接,这就是为什么扫描它们花费了这么长时间,这也是为什么在第一次报告中扫描了大约800个文件。保存了一个文件缓存扫描,因为打开了个人电脑。没有链接到互联网的文件不需要被Windows重新扫描。但是XFA包含到网站的链接。因为不可能知道网站是否被恶意修改,所以包含这些内容的文件需要定期重新包装,以确保它们仍然安全。

这里是到官方Microsoft论坛的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66718358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档