2017-02-07 43 views
2

私たちはPython 2.7からPython 3.5に移行しています。これは会社全体の変更であり、現在のスクリプトのほとんどは2.7で書かれており、追加のライブラリはありません。私は使用しているAnacondaディストリビューションを利用しており、すでに2to3モジュールを使用してスクリプトのほとんどを変更したり、それらを完全に書き換えたりしています。私はコードの1つの断片にこだわりましたが、私は書いていませんでした。元の著者はここにいません。彼はコメントを書いていないので、スクリプト全体を推測することしかできません。スクリプトの95%は、最後まで正確に動作します。解析された情報が異なる7つのcsvファイルを作成した後、csvファイルを結合するカスタム関数と、新しいcsvとして各csvをxlsブックに追加します。複数のcsvファイルを1つのxlsワークブックにまとめるPython 3

import csv 
import xlwt 
import glob 
import openpyxl 
from openpyxl import Workbook 

Parsefiles = glob.glob(directory + '/' + "Parsed*.csv") 
def xlsmaker(): 
    for f in Parsefiles: 
     (path, name) = os.path.split(f) 
     (chort_name, extension) = os.path.splittext(name) 
     ws = wb.add_sheet(short_name) 
     xreader = csv.reader(open(f, 'rb')) 
     newdata = [line for line in xreader] 
     for rowx, row in enumerate(newdata) 
      for colx, value in enumerate(row): 
       if value.isdigit(): 
      ws.write(rowx, colx, value) 

xlsmaker() 

for f in Parsefiles: 
    os.remove(f) 

wb.save(directory + '/' + "Finished" + '' + oshort + '' + timestr + ".xls") 

これはPython 2.7で書かれていて、Python 2.7で実行すると正しく動作します。問題は、Python 3.5で動作しているときにエラーが発生することです。

File "parsetool.py", line 521, in (module) 
    xlsmaker() 
File "parsetool.py", line 511, in xlsmaker 
    ws = wb.add_sheet(short_name) 
File "c:\pythonscripts\workbook.py", line 168 in add_sheet 
    raise TypeError("The paramete you have given is not of the type '%s'"% self._worksheet_class.__name__) 
TypeError: The parameter you have given is not of the type "Worksheet" 

上記のエラーを修正するために何をすべきかについてのアイデアはありますか? Iv'eは複数の書き換えを試みましたが、同様のエラーや新しいエラーが発生します。私はxls、おそらくはパンダを作成する全く新しい方法を考え出しています。

答えて

5

なぜそれが間違っているのかわかりません。コードを書き換えてパンダを使うのは価値があります。 Pandasは、各csvファイルを個別のデータフレームに読み込み、すべてのデータフレームをxls(x)ファイルに別々のシートとして保存できます。これは、pandasのExcelWriterを使用して行うことができます。例えば。

import pandas as pd 
writer = pd.ExcelWriter('yourfile.xlsx', engine=xlsxwriter) 
df = pd.read_csv('originalfile.csv') 
df.to_excel(writer, sheet_name='sheetname') 
writer.save() 

複数のcsvファイルがあるので、すべてのcsvファイルを読み込んでdictとしてdfとして保存することをお勧めします。次に、各シート名をExcelに書き出します。

+0

返信いただきありがとうございます。実際に問題を解決したのは、csvファイルのエンコーディングの一部を修正することでした。その上に、ファイルのいくつかは、スクリプトを機能させるためにワークブックとは異なる特定のエンコーディングを持たなければならなかった。完全に奇妙ですが、動作していますが、PyQt GUIの下に4つのスクリプトがあります。私はおそらくそれが将来的に働くことを保証するためにパンダを追加するでしょう。 –

+0

ちょっと@TobiasWrightここにコードを投稿する方法はありますか?私は従うことを試みている。ありがとうございました。 – JPC

+0

'NameError:name 'xlsxwriter'が定義されていません。また、 'pandas'は' openpyxl'が利用可能であると仮定しているようです。あなたはこの答えをより完全にすることができますか? (私はミニコンダから始まっています、なぜそれが私にすべてのものがインストールされていないのか答えたら)。 – r2evans

関連する問題