Python 将多个xls文件转换为xlsx-从单个文件放大的问题
我们有几千个xls文件,每个文件中有几十张纸。我们正在进行一个更大的项目来合并文件和工作表,但首先需要将它们转换为xlsx 以下代码在单个文件上运行良好:Python 将多个xls文件转换为xlsx-从单个文件放大的问题,python,pandas,openpyxl,Python,Pandas,Openpyxl,我们有几千个xls文件,每个文件中有几十张纸。我们正在进行一个更大的项目来合并文件和工作表,但首先需要将它们转换为xlsx 以下代码在单个文件上运行良好: import xlrd from openpyxl.workbook import Workbook as openpyxlWorkbook xlsBook = xlrd.open_workbook(C://path) workbook = openpyxlWorkbook() for i in xrange(0, xlsBoo
import xlrd
from openpyxl.workbook import Workbook as openpyxlWorkbook
xlsBook = xlrd.open_workbook(C://path)
workbook = openpyxlWorkbook()
for i in xrange(0, xlsBook.nsheets):
xlsSheet = xlsBook.sheet_by_index(i)
sheet = workbook.active if i == 0 else workbook.create_sheet()
sheet.title = xlsSheet.name
for row in xrange(0, xlsSheet.nrows):
for col in xrange(0, xlsSheet.ncols):
sheet.cell(row=row+1, column=col+1).value = xlsSheet.cell_value(row, col)
workbook.save(c://path/workbook.xlsx")
这很好用
尝试循环浏览所有文件时,我们使用:
import xlrd
from openpyxl.workbook import Workbook as openpyxlWorkbook
import glob
import pandas as pd
from pandas import ExcelWriter
import os
path ="C://path"
path2 = "C://path2"
allFiles = glob.glob(path + "/*.xls")
for file_ in allFiles:
xlsBook = xlrd.open_workbook(file_)
workbook = openpyxlWorkbook()
for i in xrange(0, xlsBook.nsheets):
xlsSheet = xlsBook.sheet_by_index(i)
sheet = workbook.active if i == 0 else workbook.create_sheet()
sheet.title = xlsSheet.name
for row in xrange(0, xlsSheet.nrows):
for col in xrange(0, xlsSheet.ncols):
sheet.cell(row=row+1, column=col+1).value = xlsSheet.cell_value(row, col)
##workbook.save(os.path.join(path2,file_))
##workbook.to_excel(os.path.join(path2,file_))
workbook.save("C://path/workbook.xlsx")
对于前两个注释掉的保存方法,workbook.save似乎完全不起任何作用,而to_excel告诉我工作簿没有名为to_excel的属性……这是因为我没有在循环中调用pandas吗
最终的workbook.save是一个测试——我认为它会正确地保存循环的最终迭代,因为它在脚本中只使用一个文件
相反,它会创建文件,正确命名所有工作表,但任何工作表中都没有数据
知道我错过了什么吗?为了清楚起见,我希望在循环结束时使用原始文件名命名每个文件,并使用有效的xlsx扩展名。我会尝试这种方法。更简单的代码,在我测试它时,它工作了
import pandas as pd
import glob
def converter(filename):
xl = pd.ExcelFile(filename) # reads file in
sheet_names = xl.sheet_names # gets the sheet names of the file
sheets_dict = {} # dictionary with sheet_names as keys and data as values
for sheet in sheet_names:
sheets_dict[sheet] = xl.parse(sheet)
writer = pd.ExcelWriter(r'C:\Users\you\Desktop\\' + filename.split('\\')[-1][:-4] + '.xlsx') # takes the file path and only returns the file name, now with format xlsx
for sheet_name, data in sheets_dict.iteritems():
data.to_excel(writer, sheet_name, index = False)
writer.save()
files = glob.glob(r'C:\Users\you\Desktop' + '\*.xls')
for file in files:
converter(file)
编辑:我不太熟悉openpyxl,但我不相信它有一个
.to\u excel
方法。我想您正在创建一个openpyxl工作簿,但试图使用pandas方法保存它。关于我们在上面的保存调用中搞砸了什么,您有什么想法吗?有一点,它没有删除.xls,只是在末尾添加了.xslx…这会导致其他脚本中的读取错误吗?我添加了[:-4]添加到filename.split调用的结尾,这样它也将省略文件名(.xls)上的最后4个字符。那应该可以解决它!如果你真的有数千个文件,我建议你看看openpyxl提供的只写
模式到excel
是熊猫数据帧的一种方法。