2017-01-26 2 views
0

bucket.list()メソッドは、ファイル名やサイズなどのファイル情報だけでなく、ファイルの全データを持っていますか?pythonのbotoモジュールの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) 

答えて

0

いいえ、bucket.listは、すべてのオブジェクトの内容を取得しません。 bucket.listによって返されたkeysのそれぞれに対して繰り返し処理を行うと、botoはオブジェクトの内容を(おそらくジェネレータを使用して)取得するために別々の呼び出しを行います。

すなわち、それはあなたのループの反復ごとにコンテンツをフェッチしています:

for data in object: 
    # data is fetched right before here 
    if type(data) is str: 
+0

ありがとうございました!もう一つの質問をお願いします^^私は接続** conn.close()**を終了しました。私はコンテンツ全体を受け取ることができないと思った。接続が閉じられているためです。しかし、接続を閉じても受信できました。それは接続を閉じることに関連していますか? – Kim

関連する問題