【发布时间】:2013-07-24 14:09:18
【问题描述】:
我有一个非常大的 CSV 数据集(数百万条记录)。我已经过滤和按摩并将此列表拆分为客户规范。这都是在 Python3.3 中完成的
最后一个要求是这些拆分列表以 Excel 格式保存。他们有一个实用程序,可以在进行一些计算并检查数据库中现有的重复项后,将 Excel 电子表格(以特定格式)导入他们的数据库。我的问题是它们的实用程序仅适用于 Excel 2003 .xls 文件……我事先并不知道这一点。
所以我已经可以使用 OpenPyXl 以 Excel 2007 的正确格式写入数据,但是这些文件将无法工作。我可以编写 CSV 文件,但那些也不起作用,它们的导入器需要 xls 文件。也许有一种方法可以将所有文件从 Excel 2007 xlsx 格式批量转换为 xls 格式,或从 csv 格式批量转换为 xls 格式?文件数以千计,因此无法手动完成。
最好的办法是以正确的格式输出它们,但我似乎找不到适用于 Excel 2003 格式的 python 3 兼容方式。 xlwt 仅适用于 python 2.x。
有没有人建议我如何完成这个?
编辑: 这就是解决方案的样子。
编辑2: 按照 stenci 的建议添加了关闭工作簿。
import os
import errno
import glob
import time
import win32com.client
def xlsx_to_xls(path):
xlsx_files = glob.glob(path+'\\*.xlsx')
if len(xlsx_files) == 0:
raise RuntimeError('No XLSX files to convert.')
xlApp = win32com.client.Dispatch('Excel.Application')
for file in xlsx_files:
xlWb = xlApp.Workbooks.Open(os.path.join(os.getcwd(), file))
xlWb.SaveAs(os.path.join(os.getcwd(), file.split('.xlsx')[0] + '.xls'), FileFormat=1)
xlWb.Close()
xlApp.Quit()
time.sleep(2) # give Excel time to quit, otherwise files may be locked
for file in xlsx_files:
os.unlink(file)
【问题讨论】:
-
小心:您的解决方案在保存工作簿后似乎没有关闭它们。如果你真的有数千个文件,你的函数会不断使 Excel 变胖,最终会崩溃。
-
@stenci 不错的收获。到目前为止,我只在一个小子集上对其进行了测试。谢谢!
-
不再是 xlwt 仅适用于 Python 2 的情况。
标签: excel python-3.x