2017-02-03 1 views
2

私はPythonとStackoverflowに比較的新しいですが、誰でも私の現在の問題を明らかにできることを願っています。私は1つのディレクトリからファイル(.xlsと.xlsx)を取り出し、.csvファイルに変換して別のディレクトリに入れるpythonスクリプトを持っています。私のサンプルのExcelファイル(テストの目的では4列と1行で構成されています)では完璧に動作しますが、ファイルを大きくする別のディレクトリに対してスクリプトを実行しようとするとアサーションエラー私は自分のコードとエラーを添付しました。この問題に関するいくつかの指導を楽しみにしています。ありがとう!複数のExcelファイルを1つのディレクトリに読み込んで別のディレクトリにある.csvファイルに変換するPythonスクリプト

import os 
import pandas as pd 

source = "C:/.../TestFolder" 
output = "C:/.../OutputCSV" 

dir_list = os.listdir(source) 

os.chdir(source) 

for i in range(len(dir_list)): 
    filename = dir_list[i] 
    book = pd.ExcelFile(filename) 

    #writing to csv 
    if filename.endswith('.xlsx') or filename.endswith('.xls'): 
     for i in range(len(book.sheet_names)): 
      df = pd.read_excel(book, book.sheet_names[i]) 

      os.chdir(output) 

      new_name = filename.split('.')[0] + str(book.sheet_names[i])+'.csv' 
      df.to_csv(new_name, index = False) 

     os.chdir(source) 

print "New files: ", os.listdir(output) 

The error message I receive when executing this script in the terminal shows as below:

+0

2 ** 14の許容最大行数を超えているようです。ファイルのサイズはどれくらいですか?それは何行ありますか? –

+0

こんにちはタラス、私は現在、フォルダ内の4 Excelファイルがあり、ファイルの1つは約75キロ行があります。そのような大きなファイルを収容できる別のパッケージがありますか?ありがとうございました。 – sujdrew

答えて

0

Windowsを使用しているので、パンダのデータフレームと/エクスポートをロードするために必要性をバイパスして、CSVファイルにExcelブックと輸出を照会するジェット/ ACEのSQLエンジン(Windowsの.dllファイル)を検討してください。

具体的には、pyodbcを使用してODBC接続をExcelファイルに作成し、各シートを繰り返して、SELECT * INTO ... SQLアクションクエリを使用してCSVファイルにエクスポートします。 openpyxlモジュールを使用してシート名を取得します。以下のスクリプトは相対パスに依存しないため、どこからでも実行できます。各Excelファイルには完全なヘッダー列(一番上の行の使用範囲に欠落したセルはありません)があるものとします。

import os 
import pyodbc 
from openpyxl import load_workbook 

source = "C:/Path/To/TestFolder" 
output = "C:/Path/To/OutputCSV" 

dir_list = os.listdir(source) 

for xlfile in dir_list: 
    strfile = os.path.join(source, xlfile) 

    if strfile.endswith('.xlsx') or strfile.endswith('.xls'): 
     # CONNECT TO WORKBOOK 
     conn = pyodbc.connect(r'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};' + \ 
           'DBQ={};'.format(strfile), autocommit=True) 
     # RETRIEVE WORKBOOK SHEETS 
     sheets = load_workbook(filename = strfile, use_iterators = True).get_sheet_names() 

     # ITERATIVELY EXPORT SHEETS TO CSV IN OUTPUT FOLDER 
     for s in sheets: 
      outfile = os.path.join(output, '{0}_{1}.csv'.format(xlfile.split('.')[0], s)) 
      if os.path.exists(outfile): os.remove(outfile) 

      strSQL = " SELECT * " + \ 
        " INTO [text;HDR=Yes;Database={0};CharacterSet=65001].[{1}]" + \ 
        " FROM [{2}$]"    
      conn.execute(strSQL.format(output, os.path.basename(outfile, s)) 
     conn.close() 

**注:このプロセスは、各反復で連結schema.iniファイルを作成します。削除することができます。

関連する問題