2017-08-11 8 views
0

を使ってs3バケットからダウンロードします。最後にアップロードされたファイルまたは今日アップロードされたファイルをs3バケットからPythonコードを使用してダウンロードしようとしています。以下のコードを使用して、すべてのファイルをダウンロードしないようにしますか?最後にアップロードされた複数のファイル、または今日のアップロードされたファイルを、pythonコード

#!/usr/bin/env python 

import boto 
import sys, os 
from boto.s3.key import Key 
from boto.exception import S3ResponseError 

DOWNLOAD_LOCATION_PATH = os.path.expanduser("~") + "/s3-backup/" 
if not os.path.exists(DOWNLOAD_LOCATION_PATH): 
    print ("Making download directory") 
    os.mkdir(DOWNLOAD_LOCATION_PATH) 


def backup_s3_folder(): 
    BUCKET_NAME = "xxxx" 
    AWS_ACCESS_KEY_ID= os.getenv("xxxxx") # set your AWS_KEY_ID on your environment path 
    AWS_ACCESS_SECRET_KEY = os.getenv("xxxxxx") # set your AWS_ACCESS_KEY on your environment path 
    conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_ACCESS_SECRET_KEY) 
    bucket = conn.get_bucket(BUCKET_NAME) 

    #goto through the list of files 
    bucket_list = bucket.list() 

    for l in bucket_list: 
     key_string = str(l.key) 
     s3_path = DOWNLOAD_LOCATION_PATH + key_string 
     try: 
      print ("Current File is ", s3_path) 
      l.get_contents_to_filename(s3_path) 
     except (OSError,S3ResponseError) as e: 
      pass 
      # check if the file has been downloaded locally 
      if not os.path.exists(s3_path): 
       try: 
        os.makedirs(s3_path) 
       except OSError as exc: 
        # let guard againts race conditions 
        import errno 
        if exc.errno != errno.EEXIST: 
         raise 
if __name__ == '__main__': 
    backup_s3_folder() 
+0

ようこそ。テキストのブロックを選択し、 "コードサンプル"ボタン(この '{}'のように見える)をクリックすると、ブロック全体をコードとしてマークすることができます。 – orangeInk

答えて

0

私が理解から、あなたは「今日」をアップロードし、今日で私は、このコードは、OS上の日付時刻に従って実行され、同じ日を意味したファイルのみを取得したいです。あなたはそれがこれらの線に沿って何かを行くので、各要素から最後の変更した属性を評価するために、foreach文を条件を追加することによって、これを達成することができます

#!/usr/bin/env python 

import boto 
import sys, os 
from boto.s3.key import Key 
from boto.exception import S3ResponseError 

#Get today's date 
date_today = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0) 

DOWNLOAD_LOCATION_PATH = os.path.expanduser("~") + "/s3-backup/" 
if not os.path.exists(DOWNLOAD_LOCATION_PATH): 
    print ("Making download directory") 
    os.mkdir(DOWNLOAD_LOCATION_PATH) 
def backup_s3_folder(): 
    BUCKET_NAME = "xxxx" 
    AWS_ACCESS_KEY_ID= os.getenv("xxxxx") # set your AWS_KEY_ID on your environment path 
    AWS_ACCESS_SECRET_KEY = os.getenv("xxxxxx") # set your AWS_ACCESS_KEY on your environment path 
    conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_ACCESS_SECRET_KEY) 
    bucket = conn.get_bucket(BUCKET_NAME) 

    #goto through the list of files 
    bucket_list = bucket.list() 

    for l in bucket_list: 
     key_string = str(l.key) 
     s3_path = DOWNLOAD_LOCATION_PATH + key_string 
     try: 
      if boto.utils.parse_ts(l.last_modified) > date_today: 
       print ("Current File is ", s3_path) 
       l.get_contents_to_filename(s3_path) 
     except (OSError,S3ResponseError) as e: 
      pass 
      # check if the file has been downloaded locally 
      if not os.path.exists(s3_path): 
       try: 
        os.makedirs(s3_path) 
       except OSError as exc: 
        # let guard againts race conditions 
        import errno 
        if exc.errno != errno.EEXIST: 
         raise 
if __name__ == '__main__': 
    backup_s3_folder() 

すべてこれは真夜中に今日の日付を取得した場合にチェックしているんs3ファイルの最終的に変更された属性はそれよりも大きい(したがって、ファイルは "今日"アップロードされ/変更された)。

最後に変更された属性を取得するときに、タイムゾーンを使用して処理する必要があることに注意してください。このスクリプトを実行しているシステムと同じタイムゾーンに変換してください。

関連する問題