方法bucket.list()是否不仅带来文件名或大小等文件的完整数据?
data/hello/
有三个 1,000,000 字节的文件:
data/hello/0001.txt (1,000,000 bytes)
data/hello/0002.txt (1,000,000 bytes)
data/hello/0003.txt (1,000,000 bytes)
我运行了我的代码(下面)。
结果大小为 3000000。
这让我认为它带来了文件的全部数据并产生了更多的流量。我说的对吗?
conn = boto.connect_s3()
bucket = conn.get_bucket('my_bucket')
object_list = bucket.list(prefix='data/hello/')
data_size = 0
for object in object_list:
for data in object:
if type(data) is str:
data_size += len(data)
print('size: %d'%data_size)
不,bucket.list
不会获取所有对象的内容。当你迭代bucket.list
返回的每个keys
时,boto 会进行单独的调用来获取对象的内容(大概是使用生成器)。
即,它在循环的每次迭代中获取内容:
for data in object:
# data is fetched right before here
if type(data) is str: