python gzip文件在内存中并上传到s3

时间:2017-01-08 07:43:08

标签: python sed gzip boto stringio

我正在使用python 2.7 ...

我正在尝试捕获两个日志文件,使用sed从特定日期获取数据。需要压缩文件并将其上传到s3而不在系统上创建任何临时文件,

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

流程:

  1. cat两个文件。
  2. 示例:cat file1 file2

    1. 在内存中运行sed操作。
    2. 使用zip或gzip将结果压缩到内存中。
    3. 将内存中的压缩文件上传到s3。
    4. 我已成功完成此操作,在系统上创建临时文件,并在上传到s3完成后删除它们。我找不到一个有效的解决方案,可以在不创建任何临时文件的情况下实现这一功能。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

Kind of a late answer, but I recently published a package that does just that, it's installable via pypi:

    pip install aws-logging-handlers

And you can find usage documentation on git