问题
我正在尝试实施一个Web API(基于 Flask ),它将用于在给定某些特定条件的情况下查询数据库,重建数据并最终导出结果为 .csv 文件。
由于数据量非常大,我无法构建整个数据集并同时生成 .csv 文件(例如,使用pandas创建一个DataFrame最后调用df.to_csv()),因为这会导致查询速度慢,并且http连接可能会超时。
所以我创建了一个生成器,每次查询数据库500条记录并逐一产生结果,如:
def __generator(q):
[...] # some code here
while True:
if records == None:
break
records = q[offset:offset+limit] # q means a sqlalchemy query object
[...] # omit some reconstruct code
for record in records:
yield record
最后构建一个Response对象,并将 .csv 发送到客户端:
return Response(__generate(q), mimetype='text/csv') # Flask
生成器运行良好,所有数据都由'uft-8'编码,但当我尝试打开 .csv 文件时使用Microsoft Excel,它似乎是凌乱的代码。
已经尝试的措施
在导出文件中添加 BOM 标题,不起作用;
使用其他编码,例如'gb18030'和'cp936',大部分凌乱的代码都会消失,有些代码仍然存在,而某些部分仍然存在表结构变得怪异。
我的问题是
如何使我的代码与Microsoft Excel兼容?这意味着至少应满足两个条件:
没有杂乱的代码,很好地显示;
结构良好的表格;
我非常感谢您的回答!
答案 0 :(得分:1)
通过读取每列的文本格式,它不会将其读取的列修改为日期等不同类型。你的代码可能是正确的,excel可能只是在将数据解析为csv时修改数据 - 通过以文本格式导入,它不会修改任何内容。
答案 1 :(得分:0)
我建议你研究一下xlutils。它已存在很长一段时间了,我们公司已将它用于读取配置文件以运行自动化测试和生成测试结果报告。