将搜索添加到文件类型对象的廉价方法

时间:2010-04-16 12:59:42

标签: python file urllib file-type

PdfFileReader从pdf文件中读取内容以创建对象。

我通过urllib.urlopen()从cdn查询pdf,这为我提供了一个像object这样的文件,它没有搜索。 PdfFileReader然而,使用搜索。

从通过url下载的pdf创建PdfFileReader对象的简单方法是什么。

现在,我该怎么做才能避免写入磁盘并通过file()再次阅读。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以使用.read()方法读取文件的整个数据,然后创建自己的类文件对象(最有可能通过StringIO)来提供对它的访问。

答案 1 :(得分:1)

实际上并没有一种廉价的,随时可用的方式。最简单的方法是读取所有数据并将其放入StringIO对象中。但是,这确实需要您首先阅读所有内容,这可能是您想要的,也可能不是。

如果你想要的东西只在必要时阅读,然后存储读取的内容(或者只是阅读内容的一部分),那么你必须自己编写。您可能希望在某些示例中查看StringIO模块(或Python {中的io模块)的源代码。

答案 2 :(得分:1)

我怀疑你可能会在这里过早地进行优化。

大多数现代系统会在将文件刷新到磁盘之前将文件缓存在内存中很长一段时间,因此如果您将数据写入临时文件,请将其重新读入,然后关闭并删除您可能会发现的文件没有明显的光盘流量(除非它真的是100MB)。

您可能希望查看使用tempfile.TemporaryFile()创建临时文件,该文件在关闭时自动删除,或者tempfile.SpooledTemporaryFile()明确地将其全部保存在内存中,直到超过特定大小。