私たちは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、おそらくはパンダを作成する全く新しい方法を考え出しています。
返信いただきありがとうございます。実際に問題を解決したのは、csvファイルのエンコーディングの一部を修正することでした。その上に、ファイルのいくつかは、スクリプトを機能させるためにワークブックとは異なる特定のエンコーディングを持たなければならなかった。完全に奇妙ですが、動作していますが、PyQt GUIの下に4つのスクリプトがあります。私はおそらくそれが将来的に働くことを保証するためにパンダを追加するでしょう。 –
ちょっと@TobiasWrightここにコードを投稿する方法はありますか?私は従うことを試みている。ありがとうございました。 – JPC
'NameError:name 'xlsxwriter'が定義されていません。また、 'pandas'は' openpyxl'が利用可能であると仮定しているようです。あなたはこの答えをより完全にすることができますか? (私はミニコンダから始まっています、なぜそれが私にすべてのものがインストールされていないのか答えたら)。 – r2evans