内存中的python gzip文件并上载到s3

内存中的python gzip文件并上载到s3,python,sed,gzip,boto,stringio,Python,Sed,Gzip,Boto,Stringio,我正在使用python 2.7 我正在尝试cat两个日志文件,使用sed从特定日期获取数据。需要压缩文件并将其上载到s3,而无需在系统上生成任何临时文件 sed_command = "sed -n '/{}/,/{}/p'".format(last_date, last_date) 流量: 第二类文件 示例:cat文件1文件2 在内存中运行sed操作 使用zip或gzip在内存中压缩结果 将内存中的压缩文件上载到s3 我已经成功地在系统上创建了临时文件,并在上传到s3完成后将其删除。在不创建任

我正在使用python 2.7

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

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

  • 第二类文件
  • 示例:cat文件1文件2

  • 在内存中运行sed操作
  • 使用zip或gzip在内存中压缩结果
  • 将内存中的压缩文件上载到s3
  • 我已经成功地在系统上创建了临时文件,并在上传到s3完成后将其删除。在不创建任何临时文件的情况下,我找不到一个有效的解决方案来实现这一点。

    这里是它的要点:

    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()
    

    答案有点晚,但我最近发布了一个解决方案,它可以通过pypi安装:

        pip install aws-logging-handlers
    

    如果您使用的是EC2实例,那么您可以在

    上找到使用说明文档,因为您已经在shell中了,那么将输出写入tmpfs文件系统中的一个文件(如
    /run
    )怎么样。那么它在内存中的大小就和在python中的大小一样。