2017-02-07 224 views
2

我們正在從python 2.7轉換到python 3.5。這是一個公司範圍內的變化,我們目前的大多數腳本都是用2.7編寫的,沒有額外的庫。我利用了我們正在使用的Anaconda發行版,並已使用2to3模塊更改了大部分腳本或完全重寫了它們。儘管如此,我還是堅持使用一段代碼,而我並沒有寫這篇代碼,原作者也不在這裏。他也沒有提供評論,所以我只能猜測整個腳本。 95%的腳本正常工作,直到它創建7個帶有不同解析信息的csv文件結束後,它具有一個自定義函數,可將csv文件合併到xls工作簿中,並將每個csv合併爲新選項卡。將多個csv文件合併爲一個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

不知道爲什麼它錯了。代替重寫代碼並使用熊貓是值得的。熊貓可以將每個csv文件讀取到單獨的數據框中,並將所有數據框保存爲xls(x)文件中的單獨表單。這可以通過使用熊貓的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文件並將它們作爲df存儲在字典中。然後用新的工作表名稱將每個df寫入Excel。

+0

感謝您的回覆。真正解決了這個問題的是修復了一些csv文件的編碼。最重要的是,一些文件必須具有與工作簿不同的特定編碼才能使腳本正常工作。完全奇怪,但它的工作原理,現在我有四個功能腳本全部在PyQt GUI下。我可能會添加熊貓以確保它能在將來工作。 –

+0

嗨@TobiasWright有沒有辦法可以在這裏發佈代碼。我正在嘗試跟蹤。謝謝。 – JPC

+0

'NameError:name'xlsxwriter'未定義'。另外,似乎'pandas'假設'openpyxl'可用。你能否讓這個答案更完整? (我是從miniconda開始的,如果這就是爲什麼我沒有安裝所有東西的原因。) – r2evans

相關問題