我如何调整我的代码以使其与 Microsoft Excel 兼容?
How can I adapt my code to make it compatible to Microsoft Excel?
问题
我正在尝试实现一个 Web API(基于 Flask),它将用于查询给定一些特定条件的数据库,重建数据,最后将结果导出到 .csv 文件。
Since the amount of data is really really huge, I can not construct the whole dataset and generate the .csv file all at once(e.g. create a DataFrame using pandas and finally call df.to_csv()), because that would cause a slow query and maybe the http connection would end up timeout.
所以我创建了一个生成器,每次查询数据库 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
最后构造一个Responseobject,发送.csv到客户端:
return Response(__generate(q), mimetype='text/csv') # Flask
生成器运行良好,所有数据均由 'uft-8' 编码,但是当我尝试打开 .csv 文件使用微软Excel,看起来是乱码
已经尝试过的措施
添加 BOM header 到导出文件,不起作用;
使用一些其他编码,如 'gb18030' 和 'cp936',大部分乱码不见了,有的还在,有的table结构变得怪异
我的问题是
How can I make my code compatible to Microsoft Excel? That means at least two conditions should be satisfied:
no messy code, well displayed;
well structured table;
非常感谢您的回答!
我建议您查看 xlutils。它已经存在了很长一段时间,我们公司已将其用于读取配置文件以进行 运行 自动化测试以及生成测试结果报告。
通过读取每列的文本格式,它不会修改读取为不同类型(如日期)的列。您的代码可能是正确的,并且 excel 可能只是在将数据解析为 csv 时修改数据 - 通过导入为文本格式,它不会修改任何内容。
问题
我正在尝试实现一个 Web API(基于 Flask),它将用于查询给定一些特定条件的数据库,重建数据,最后将结果导出到 .csv 文件。
Since the amount of data is really really huge, I can not construct the whole dataset and generate the .csv file all at once(e.g. create a DataFrame using pandas and finally call df.to_csv()), because that would cause a slow query and maybe the http connection would end up timeout.
所以我创建了一个生成器,每次查询数据库 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
最后构造一个Responseobject,发送.csv到客户端:
return Response(__generate(q), mimetype='text/csv') # Flask
生成器运行良好,所有数据均由 'uft-8' 编码,但是当我尝试打开 .csv 文件使用微软Excel,看起来是乱码
已经尝试过的措施
添加 BOM header 到导出文件,不起作用;
使用一些其他编码,如 'gb18030' 和 'cp936',大部分乱码不见了,有的还在,有的table结构变得怪异
我的问题是
How can I make my code compatible to Microsoft Excel? That means at least two conditions should be satisfied:
no messy code, well displayed;
well structured table;
非常感谢您的回答!
我建议您查看 xlutils。它已经存在了很长一段时间,我们公司已将其用于读取配置文件以进行 运行 自动化测试以及生成测试结果报告。
通过读取每列的文本格式,它不会修改读取为不同类型(如日期)的列。您的代码可能是正确的,并且 excel 可能只是在将数据解析为 csv 时修改数据 - 通过导入为文本格式,它不会修改任何内容。