如何解决如何使用密码压缩类似文件的对象,然后在Python中将其上传到s3?
我想将数据帧导出到.csv文件,将其压缩,为其设置密码,然后将其上传到公共s3存储桶。
由于我正在编写无服务器脚本,因此I / O有点棘手,但是我能够编写以下代码:
<input type="date" id="start" name="trip-start"
value="2018-07-22"
min="2018-01-01" max="2018-12-31">
但是,我无法为.zip文件设置密码。我尝试使用pyminizip库,但无法正常工作。
import gzip
import io
import boto3
gz_buffer = io.BytesIO()
report_bucket_public = "s3_bucket"
report_key_public = "s3_key"
df_report = pd.DataFrame(...) # the data to upload
with gzip.GzipFile(mode='w',fileobj=gz_buffer) as gz_file:
df_report.to_csv(io.TextIOWrapper(gz_file,'utf8'),index=False)
s3_client = boto3.resource('s3')
s3_obj = s3_client.Object(report_bucket_public,report_key_public)
s3_obj.put(Body=gz_buffer.getvalue())
s3_client.ObjectAcl(report_bucket_public,report_key_public).put(ACL='public-read')
csv_stream = io.BytesIO()
df_report.to_csv(io.TextIOWrapper(csv_stream,index=False)
zip_stream = io.BytesIO()
secret_password = "password"
compression_level = 5
pyminizip.compress(
csv_stream,None,zip_stream,secret_password,compression_level
)
有人可以帮忙吗?
解决方法
我通过使用tempfile.TemporaryDirectory()
并将未压缩和压缩的数据都写入临时目录中的文件来完成此任务。参见this answer的相关问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。