2015-01-26 90 views
1

我有一個dicts列表(例如[{'a': 'b', 'c': 'd'}, {'e': 'f', 'g': 'h'}]),我想使用Python boto包將它存儲在s3中。使用Python存儲s3中的文件boto

一種方法是遍歷列表,寫入文件對象f,使得f的每一行都是json對象。然後我可以使用key.set_contents_from_file(f)。是正確的/最好的方式來做到這一點?

看來寫入本地文件是不必要的中間步驟,但我不確定。

回答

2

要跳過寫入文件步驟,您可以使用key.set_contents_from_string(str)直接放置您的字典值。

參見:http://boto.readthedocs.org/en/latest/ref/s3.html#module-boto.s3.key

(CTRL + F爲set_contents_from_string

另一種迂迴的方式(以避免寫入磁盤)是使用set_contents_from_stream,並創建一個在內存中的 「文件」(使用StringIO的等等),你傳遞給那個函數。

+0

嗯,但這需要一個字符串'str'而不是一個列表(非字符串列表),我不知道我怎麼可以一次寫這麼一行。有什麼想法嗎? (我想一次讀一行,這樣從s3讀取文件的內容就可以一次完成一行,而不必加載整個文件)。 – tscizzle 2015-01-26 20:12:23

+0

除非你期望你的json文件很大,這聽起來有點像不必要的優化。你可以'json.dumps(your_dict)'將其轉換爲JSON,然後將整個JSON轉換爲S3?然後,任何獲得JSON的客戶都可以將其解析爲JSON。如果你真的想要流JSON對象的JSON對象,那麼你可以使用「流JSON解析器」。 – mauzel 2015-01-26 20:17:06

+0

好點,但我確實希望json文件很龐大,而且實際上爲了不超過我們託管的託管機器的內存限制,必須將數據集合起來。那麼這個「流式JSON解析器」怎麼樣? – tscizzle 2015-01-26 20:20:28

相關問題