非常に大きな CSV データ セット (数百万レコード) があります。私はすでにこのリストをフィルタリングしてマッサージし、クライアントの仕様に分割しました。これはすべてPython3.3で行われました
最後の要件は、これらの分割リストを Excel 形式で保存することです。彼らは、いくつかの計算を行い、DB 内の既存の重複をチェックした後、Excel スプレッドシートを (特定の形式で) データベースにインポートするユーティリティを持っています。私の問題は、それらのユーティリティが Excel 2003 .xls ファイルでしか機能しないことです... 私はこれを前もって知りませんでした。
したがって、OpenPyXl を使用して Excel 2007 の正しい形式でデータを書き込むことはできますが、これらのファイルは機能しません。CSV ファイルを書き込むことはできますが、それらも機能しません。インポーターには xls ファイルが必要です。おそらく、すべてのファイルを Excel 2007 xlsx 形式から xls 形式に、または csv 形式から xls 形式に一括変換する方法はありますか? 何千ものファイルがあるので、手作業ではできません。
最善の方法は、それらを正しい形式で出力することですが、Excel 2003 形式で動作する Python 3 互換の方法が見つからないようです。xlwt は python 2.x のみです。
どうすればこれを終了できるか、誰か提案がありますか?
編集:これは、ソリューションがどのように見えるかです。
EDIT2: 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)