将多个csv文件合并到单个xls工作簿Python 3中

我们正在从python 2.7转换到python 3.5。 这是一个公司范围内的变化,我们目前的大部分脚本都是用2.7编写的,没有额外的库。 我利用了我们正在使用的Anaconda发行版,并已经使用2to3模块更改了大部分脚本,或者完全重写了它们。 我被卡在一块代码,虽然我没有写,原来的作者不在这里。 他也没有提供评论,所以我只能猜测整个脚本。 95%的脚本正常工作,直到创build7个带有不同parsing信息的csv文件的结尾,它具有一个自定义函数,可以将csv文件合并到xls工作簿中,并将每个csv作为新的选项卡。

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" 

任何想法应该做什么来解决上述错误? 我尝试了多次重写,但是我得到了类似的错误或新的错误。 我正在考虑只是想出一个全新的方法来创buildxls,可能是pandas。

不知道为什么它错了。 改写代码并使用pandas是值得的。 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文件并将其作为df存储在字典中。 然后使用新的工作表名称将每个df写入Excel。