【发布时间】:2018-01-23 18:58:43
【问题描述】:
我正在尝试将从 Django 中的模型中取出的内容作为 csv 文件上传。我不想将文件保存在本地,而是将其保存在缓冲区中并上传到 s3。目前这段代码没有按原样报错,可以正常上传文件,但是文件是空的。
file_name='some_file.csv'
fields = [list_of_fields]
header = [header_fields]
buff = io.StringIO()
writer = csv.writer(buff, dialect='excel', delimiter=',')
writer.writerow(header)
for value in some_queryset:
row = []
for field in fields:
# filling in the row
writer.writerow(row)
# Upload to s3
client = boto3.client('s3')
bucket = 'some_bucket_name'
date_time = datetime.datetime.now()
date = date_time.date()
time = date_time.time()
dt = '{year}_{month}_{day}__{hour}_{minute}_{second}'.format(
day=date.day,
hour=time.hour,
minute=time.minute,
month=date.month,
second=time.second,
year=date.year,
)
key = 'some_name_{0}.csv'.format(dt)
client.upload_fileobj(buff, bucket, key)
如果我取缓冲区的内容,肯定是在写:
content = buff.getvalue()
content.encode('utf-8')
print("content: {0}".format(content)) # prints the csv content
编辑:我正在使用在缓冲区中创建的 zip 文件做类似的事情:
with zipfile.ZipFile(buff, 'w') as archive:
写入存档(添加我正在生成的 pdf 文件),完成后,我执行此操作:buff.seek(0),这似乎是必要的。如果我在上面做类似的事情,它会报错:Unicode-objects must be encoded before hashing
【问题讨论】:
-
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
-
现在知道了@halfer。这是有道理的:)
标签: django python-3.x amazon-s3 boto3