Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python boto在s3中存储文件_Python_File_Amazon S3_Boto - Fatal编程技术网

使用Python boto在s3中存储文件

使用Python boto在s3中存储文件,python,file,amazon-s3,boto,Python,File,Amazon S3,Boto,我有一个dict列表(例如,[{'a':'b','c':'d'},{'e':'f','g':'h'}]),我想使用Python boto包将其存储在s3中 一种方法是遍历列表,写入文件对象f,这样f的每一行都是一个json对象。然后我可以使用键。从文件(f)中设置内容。这是正确的/最好的方法吗 写入本地文件似乎是一个不必要的中间步骤,但我不确定。要跳过写入文件的步骤,可以使用键。从字符串(str)设置内容,直接输入dicts的值 见: (CTRL+F表示设置字符串中的内容) 另一种迂回的方法(避

我有一个dict列表(例如,
[{'a':'b','c':'d'},{'e':'f','g':'h'}]
),我想使用Python boto包将其存储在s3中

一种方法是遍历列表,写入文件对象
f
,这样
f
的每一行都是一个json对象。然后我可以使用
键。从文件(f)
中设置内容。这是正确的/最好的方法吗


写入本地文件似乎是一个不必要的中间步骤,但我不确定。

要跳过写入文件的步骤,可以使用
键。从字符串(str)
设置内容,直接输入dicts的值

见:

(CTRL+F表示
设置字符串中的内容)


另一种迂回的方法(避免写入磁盘)是使用
set\u contents\u from\u stream
,并创建一个内存中的“文件”(使用StringIO等),并将其传递给该函数。

Hmm,但它接受一个字符串
str
,而不是一个列表(此时的非字符串列表),我不知道我怎么能这样一次只写一行。有什么想法吗?(我想一次读取一行,这样从s3读取文件的东西就可以一次读取一行,而不必加载整个内容)。除非您希望json文件很大,否则这听起来有点像是不必要的优化。您可以
json.dumps(您的命令)
将其转换为json,然后将整个json放入S3?然后,任何获得JSON的客户端都可以将其解析为JSON。如果你真的想一个JSON对象一个JSON对象地流式传输它,那么你可以使用“流式JSON解析器”。这一点很好,但我确实希望JSON文件是巨大的,并且实际上必须将数据集分块以不超过我们托管的托管机器的内存限制。那么这个“流式JSON解析器”怎么样?很有趣。如果可以在内存中具体化dict,可以尝试使用python的StringIO将字符串作为文件处理,然后使用
set\u content\u from\u file
(或
from\u stream
)。至于Python中的流式JSON解析器,有用于此的库,但我不熟悉它们。将其视为Python生成器可能也会起作用。如果您想要的东西不是将其具体化为内存中的字符串,而是要使用
set\u content\u from\u stream
,则可以编写一个类似文件的类来包装您的dict列表,并将其传递到函数中。类似文件的类将在一行返回一个dict,并转换为JSON字符串。您可能至少需要实现
tell()
read()