PdfFileReader
讀取PDF文件的內容,以創建一個對象。廉價的方式來添加尋求一個文件類型對象
我通過urllib.urlopen()
查詢從CDN的PDF格式,這提供了我喜歡的對象,它沒有尋求一個文件。 PdfFileReader
,然而使用seek。
有什麼簡單的方法來創建通過URL下載的PDF一個PdfFileReader對象。
現在,我能做些什麼來避免寫入磁盤,並通過file()
再次閱讀。
在此先感謝。
PdfFileReader
讀取PDF文件的內容,以創建一個對象。廉價的方式來添加尋求一個文件類型對象
我通過urllib.urlopen()
查詢從CDN的PDF格式,這提供了我喜歡的對象,它沒有尋求一個文件。 PdfFileReader
,然而使用seek。
有什麼簡單的方法來創建通過URL下載的PDF一個PdfFileReader對象。
現在,我能做些什麼來避免寫入磁盤,並通過file()
再次閱讀。
在此先感謝。
是不是真的有便宜的,準備使用的方式做到這一點。最簡單的方法是讀取所有數據並將其放入StringIO
對象中。但是,這確實需要你先閱讀所有內容,這可能是也可能不是你想要的。
如果你想要的東西,只讀取必要,然後存儲什麼閱讀(或者也許只是一個什麼閱讀部分),那麼你必須把它寫自己。對於某些示例,您可能希望看到StringIO
模塊(或Python12.6中的io
模塊)的源代碼。
不,不,不,不是100 MB文件。我只想要一些有效的東西。如果可能的話,價格便宜。不通過編寫IO模塊。 :) – 2010-04-16 13:14:01
所以使用第一個建議:StringIO是你的朋友。 – 2010-04-16 13:15:02
你可以使用.read()
方法在文件的整個數據讀取,然後創建自己的文件對象(最有可能通過StringIO)提供對它的訪問。
上的說明。我無法執行'file(urllib.urlopen('abc.pdf')。read())'。我得到「TypeError:file()參數1必須是沒有NULL字節的編碼字符串,不是str」 – 2010-04-16 13:08:26
'file()'不是像'dict()'或'list()'這樣的轉換函數 - 它實際上需要相同的參數作爲'open()'(文件名,可選模式+緩衝區大小)。你不能只傳遞它的文件內容並獲得一個文件對象。 – Amber 2010-04-16 13:10:45
我懷疑你可能在這裏過早優化。
大多數現代系統都會將文件緩存到內存中一段時間,然後將它們刷新到磁盤,所以如果您將數據寫入臨時文件,請重新讀入,然後關閉並刪除您可能找到的文件沒有顯着的光盤流量(除非它真的是100MB)。
您可能想要看看如何使用tempfile.TemporaryFile()
來創建臨時文件,該文件在關閉時會自動刪除,否則tempfile.SpooledTemporaryFile()
會明確地將其全部保留在內存中,直到其超過特定大小。
請注意,如果你*保存到磁盤並打開它,你可以使用'open'而不是'file'。 – 2010-04-16 13:03:29
Mike:'PdfFileReader(file('aaa.pdf'))'確實很好。 – 2010-04-16 13:11:13
是的,但最好在'file()'上使用'open()' - 它們採用相同的參數。請參閱http://docs.python.org/library/functions.html#file – Amber 2010-04-16 13:11:58