Python3.5 处理excel_1(

发布时间:2019-08-06 13:55:38编辑:auto阅读(1170)

    Python3.5 处理excel_1(删除多余行)

    望共同进步

    转载请注明地址 http://mp.blog.csdn.net/postedit/79513650

    处理excel这里需要两步:

    1.读取excel:   http://blog.csdn.net/weixin_39701039/article/details/79492672 ;

    2.写入excel:   http://mp.blog.csdn.net/postedit/79504931 

    这里主要讲怎样删除多余行

    直接上代码了,代码中有思路及代码的部分注释

    #coding:utf-8
    #python3.5.1
    
    import xlrd
    import xlwt
    import re    #正则模块
    
    path = r'G:\任务20180305\TEST'
    
    file_r = 'del.xlsx'
    
    data = xlrd.open_workbook(path + '/' + file_r)
    nums = len(data.sheets())
    
    sheet1 = data.sheets()[0]
    
    #获取行数
    nrows = sheet1.nrows
    #获取列数
    ncols = sheet1.ncols
    
    #如图1,我们知道想要删除小面的空行、续表行、以及姓名行(第一行的姓名不能删除)
    #思路:1.我们去除不需要行的行数(即哪一行),也就是获取我们所需要行在第几行的一个列表;2.循环这个列表,获取我们所需要的行数据,写入对应的excel中
    
    #1
    
    #定义空list
    rows_get = []
    #循环行
    for i in range(nrows):
        #获取第一列的各行数据
        A0 = sheet1.cell(i,0).value
        #去除首位空格
        A0 = A0.strip()
    
        #不从第一行开始判断,因为第一行的姓名行我们需要保留,后面不需要,这里选3(根据具体情况而定)吧
        if i <3:
    
            #加入row_get
            rows_get.append(i)
        else:
    
    
    
            #开始正则部分
            #规定正则格式,这里是匹配中文字符(因为表中含有continued table1行)
            p = r'[\u4e00-\u9fa5]'
            #编译
            pattern = re.compile(p)
            #在A0中匹配
    
            try:
                #判断A0中是否存在中文字符(这里把英文,空行剔除了)
                ch_first = re.findall(pattern, A0)[0]   #因为空list不能([0])选择第一个元素,会显示错误(IndexError: list index out of range)
    
                #剔除续表行
                if A0[0:2] == '续表':
                    pass
                #剔除姓名行
                elif A0[0:2] == '姓名':
                    pass
                else:
                    rows_get.append(i)
    
    
            except:
                continue
    
    #已经得到我们所需数据的行标数
    print(rows_get)
    
    #新建工作簿
    workbook = xlwt.Workbook('ascii')
    #新建sheet
    sheet_w = workbook.add_sheet('write')
    
    #定义初始变量
    wx = 0
    #循环rows_get
    for x in rows_get:
    
        for y in range(ncols):
    
            sheet_w.write(wx,y,sheet1.cell(x,y).value)  #wx,y 是写入sheet的行列标,sheet1.cell(x,y).value是原表我们需要的数据
    
        wx = wx + 1  #行数加一,使得写入的sheet 行连续
    #保存工作簿
    workbook.save(path + '/' + 'new.xls')
    
    #如图2
    
    

    图1:


    图2:



    这里一个工作表会处理了,那多个表只是在前sheet的选择加个循环就行了

    望有所帮助,望采纳!!

关键字