需求来源:
来自于某一群友提问,目前有这样的数据如下图,如何将A列处理为多列显示?
主要知识点:
xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入
字符串分割 split('|')
合并单元格
生成新的.xlsx 文件
直接上代码,代码中有详细的注释信息:
import xlrdimport xlwt#读取Excel文件file=u"pythonsplit.xlsx"#注意读中文文件名稍微处理一下data=xlrd.open_workbook(file)#Sheet1table = data.sheet_by_index(0)#按照索引读Excel文件firstrows=table.row_values(0)print("读取第一行:"+str(firstrows))totalRows = table.nrows #行totalCols = table.ncols #列print ("总行数"+str(totalRows),"总列数"+str(totalCols))workbook = xlwt.Workbook()sheet = workbook.add_sheet('new')mergeSize = 0for i in range(1,totalRows): result = table.cell_value(i, 0) #分割第i行第0列 res=result.split('|') # 如:3室2厅| 99.8平方米 |西南 北 |毛坯 |高楼层(共33层)|2011年建 |板楼 分割后的长度 mergeSize=len(res) #处理原excel中的第一列的数据 for k in range(0, mergeSize): sheet.write(i, k, res[k]) #处理原excel中大于第一列的数据, for p in range(1, totalCols): sheet.write(i, mergeSize -1 + p , table.cell_value(i, p))#设置第一行标题#合并 第0行到第0行的第0列到第mergeSize - 1列 并设置为table.cell_value(0, 0)sheet.write_merge(0, 0, 0, mergeSize - 1, table.cell_value(0, 0))for j in range(1,totalCols): print(j, table.cell_value(0, j)) sheet.write(0, mergeSize-1 + j, table.cell_value(0, j))#生成的新文件名workbook.save('pythonsplit01.xlsx')
代码执行成功后的新的excel文件如下(.py文件和.excel文件在同级目录)