美文网首页
PY爬虫极速学习 (六)Excel表格合并

PY爬虫极速学习 (六)Excel表格合并

作者: 罗卡恩 | 来源:发表于2019-11-30 01:20 被阅读0次
    image.png
    image.png

    xlwt xlsxwriter会替换之前的 不能追加


    image.png
    第一种比较简单

    第二种难
    主要是巩固基础 所以就按第二种的写
    安装xlsxwriter


    image.png
    然后是报了个警告
    说是pip有点老要更新
    这样就更新完毕
    image.png
    在安装 xlrd
    image.png

    创建三个excel


    image.png
    每一个excel 有两个sheet 东西都不一样
    image.png
    第一个是课 第二个是书
    image.png
    老版office2007不支持这样多shell存 所以网上直接在线编辑文档后下载
    写不出来都行 看懂代码就行
    老师代码没看懂 比较绕 自己写了个
    import xlrd,xlsxwriter
    
    #设置要合并的所有文件
    road="D:/py/Excel合并用的Excel/"
    allxlsPath=[road+"test1.xls",road+"test2.xls",road+"test3.xls"]
    #合并后生成的文件
    endxlsPath=road+"combineExcel.xls"
    
    #变量
    #储存一个标签的结果
    sValue=[]
    #储存第一个文件的sheet信息
    #根据第一个为基准创建新的表格
    shname=[]
    
    #下面是各种方法
    
    #读取第一个待读文件 获取sheet数
    xls=xlrd.open_workbook(allxlsPath[0])
    #获取所有sheet
    sh=xls.sheets()
    
    for sheet in sh:
        shname.append(sheet.name)
        sValue.append([])
    
    #获取某个文件内容 返回当前sheet内容
    def getfile(path,shNum):
        #打开文件 覆盖之前的
        xls=xlrd.open_workbook(path)
        #根据sheet名打开一页
        table=xls.sheet_by_name(shname[shNum])    
        return table
    
    #获取返回第一行的值
    def getHeadValue(table):   
        return table.row_values(0)
    #获取返回除了第一行所有行的值
    def getOtherValue(table):
        #获取某个sheet的行数
        num=table.nrows 
        rValue=[]
        for row in range(1,num):
            #返回一整行
            rdata=table.row_values(row)
            rValue.append(rdata)
        return rValue
    
    #依次读取各sheet的内容
    #依次读取各文档当前sheet的内容
    for shNum in range(0,len(shname)):
        fileValue=sValue[shNum]
        table=getfile(allxlsPath[0],shNum)  
        #加入标题
        fileValue.append(getHeadValue(table))
        for path in allxlsPath:
            print("正在读取文件"+str(path)+"的第"+str(shNum)+"个shell的...")
            table=getfile(path,shNum)
            #加入每一个文档的除了第一行的每一行
            for value in getOtherValue(table):
               fileValue.append(value)
        #print(sValue[0])
        #print(sValue[1])
    
    #由于append具有叠加关系 分析可得所有信息在sValue中储存
    
    #打开最终写入的文件 大写别忘了 我是在这卡主了
    wbl=xlsxwriter.Workbook(endxlsPath)
    
    #遍历每个sheet的数据
    for  s in range(0,len(shname)):
        #取汇总过的一个sheet的数据
        sheetData=sValue[s]
        #创建一个新的sheet
        thisSheet=wbl.add_worksheet(shname[s])
        #将多个标签写入新文件中
        for a in range(0,len(sheetData)):       
            for b in range(0,len(sheetData[a])):
                    data=sheetData[a][b]
                    #创建一个sheet工作对象
                    thisSheet.write(a,b,data)
    #写入需要关闭才会保存生成
    wbl.close()
    

    思路是把每个重复的第一行 提取出来

    image.png
    之后只读第一行之后的
    以第一个文档为基准
    然后把他们加到一个数组里
    sValue打印出来
    用在线json转换 是这个格式
    http://www.bejson.com/index.php
    image.png
    很多东西老师也没讲 自己去查
    最终
    image.png
    image.png
    sheet将以第一个文档为基准
    image.png
    怎么说作为练习难度跳跃幅度比较大 可能会直接劝退
    和C#有点不同的是 方法必须写在用它代码的上方
    就是方法也要初始化 是类似于一条线走下来的

    相关文章

      网友评论

          本文标题:PY爬虫极速学习 (六)Excel表格合并

          本文链接:https://www.haomeiwen.com/subject/aumjwctx.html