【发布时间】:2014-11-11 19:58:30
【问题描述】:
我有一个非常大(> 200 万行)的 csv 文件,该文件正在内部 Web 服务中生成和查看。问题是当这个系统的用户想要导出这个 csv 来运行自定义查询时,他们会在 excel 中打开这些文件。 Excel 正在尽其所能对数字进行格式化,但有些人要求使用带有过滤器之类的 xlsx 格式的数据。
问题归结为:使用python2.7,如何将大型csv文件(> 200万行)读入excel(或多个excel文件)并控制格式? (日期、数字、自动过滤器等)
我对 python 和内部 excel 解决方案持开放态度。
【问题讨论】:
-
您可以使用openpyxl,但其格式化功能有限。另一种选择是使用powershell,我认为它比
openpyxl具有更多的格式化能力 -
另一种选择是使用 python win32 扩展并使用 excel 的 COM 接口。诀窍是抄袭现有的 VB 脚本。但实际上,这在 VB 或 C# 中可能更容易完成。
-
我从未使用过 powershell、VB 或 C#。现在 xlsxWriter 的性能非常差,无法真正处理我给它的工作量(即使是从 csv 复制到 xlsx 的这一行)。
-
XlsxWriter 可以处理所有这些功能、格式设置和自动过滤器,但是 200 万行是很多数据,Excel 每个工作表的限制约为 100 万行。确保在 XlsxWriter 中使用
constant_memory模式,但即便如此,每百万个单元格可能需要大约 15 秒(大概数字)。 -
我最终获得了所需的性能,方法是使用多处理库在一个进程中对来自 csv 的数据进行规范化,然后将其传递给其他进程以格式化为 excel。当我有更多时间时,我会发布一个包含一些性能统计数据的解决方案的最小示例。
标签: python excel csv xlsxwriter