2015-05-02 95 views
0

我有一個名爲combine.gz的文件,我需要從s3的子文件夾下載文件。我能夠到達combine.gz文件(特別是每個目錄一個),但我無法在boto中找到一個方法將.gz文件讀取到本地機器。使用boto從s3存儲桶的子目錄中下載.gz文件

所有我能找到的是boto.utils.fetch_file,key.get_contents_to_filename, key.get_contents_to_file所有這些方法,據我所知,直接流文件的內容。

有沒有辦法讓我首先使用boto從S3讀取.gz格式的壓縮文件到我的本地機器上,然後解壓縮它?

任何幫助將不勝感激。

+1

對你來說,「流文件的內容」和「讀文件」之間的區別是什麼?它們聽起來像我的同義詞。 – abarnert

+0

你需要boto嗎?爲什麼不直接用urllib或請求下載文件? –

+0

[使用boto python以遞歸方式從s3下載文件](http://stackoverflow.com/questions/13063474/downloading-the-files-from-s3-recursively-using-boto-python) –

回答

3

您可以將整個內容讀取爲字符串,然後將其作爲字符串對象進行管理。這是非常危險的,可能會導致內存或緩衝區問題,所以要小心。

檢查到使用cStringIO.StringIO,gzip.GzipFile和博託

datastring = key.get_contents_as_string() 
data = cStringIO.StringIO(datastring) 
rawdata = gzip.GzipFile(fileobj=data).read() 

再次 - 要小心,因爲這有大量內存和潛在的安全問題事件gzip文件的格式不正確。如果你不控制雙方,你會想試着包裝,除了防守編碼。

相關問題