2017-01-08 108 views
2

我使用Python 2.7 ...蟒蛇gzip文件到S3

我想貓的兩個日誌文件,使用SED得到特定日期的數據。需要壓縮的文件,並將其上傳到S3而不會使系統上的任何臨時文件,

sed_command = "sed -n '/{}/,/{}/p'".format(last_date, last_date) 

流量:

  1. 貓兩個文件。

實施例:貓文件1文件2

  • 運行的sed在存儲器操作。
  • 使用zip或gzip壓縮內存中的結果。
  • 將內存中的壓縮文件上傳到s3。
  • 我已經成功地在系統上創建臨時文件並在上傳到s3完成時刪除它們。我無法找到一個工作解決方案,在不創建任何臨時文件的情況下即時運行。

    +0

    如果你在一個EC2實例,因爲你在外殼是已經,如何在tmpfs文件系統,比如'/ run'寫輸出到文件。然後它會像在Python中一樣在內存中進行。 – systemjack

    回答

    3

    下面是它的要點:

    conn = boto.s3.connection.S3Connection(aws_key, secret_key) 
    bucket = conn.get_bucket(bucket_name, validate=True) 
    buffer = cStringIO.StringIO() 
    writer = gzip.GzipFile(None, 'wb', 6, buffer) 
    writer.write(sys.stdin.read()) 
    writer.close() 
    buffer.seek(0) 
    boto.s3.key.Key(bucket, key_path).set_contents_from_file(buffer) 
    buffer.close()