Python简单处理xls表格(记录一下)

源码_处理程序.py

import xlrd,xlwt
from xlutils.copy import copy
import 源码_模块程序

NAME_I=input("输入NAME:")
NAME_O=input("输出NAME:")

wb=xlrd.open_workbook(NAME_I) # 获取工作簿对象
ws=wb.sheet_by_name('new sheet') # 获取工作表对象

# 获取原始列值
col_1=ws.col_values(6)    # 处理:AD号码
col_2=ws.col_values(7)    # 处理:宽带账号
col_3=ws.col_values(23)   # 跟踪:大VLAN
col_4=ws.col_values(24)   # 跟踪:小VLAN
col_5=ws.col_values(27)   # 跟踪:OLT设备

# 复制工作簿、新建工作表  对象
nwb=copy(wb);
nws=nwb.add_sheet('编辑')

# 获取原始行序
row_s=[]
for i in range(len(col_1)):
    row_s.append(i)

# 处理AD号码
(row_s1,col_s1)=源码_模块程序.quKF(row_s,col_1)
(row_s2,col_s2)=源码_模块程序.dou(row_s1,col_s1)
(row_s3,col_s3)=源码_模块程序.shai(row_s2,col_s2)

# 处理宽带帐号
(row_r1,col_r1)=源码_模块程序.quKF(row_s,col_2)
(row_r2,col_r2)=源码_模块程序.dou(row_r1,col_r1)
(row_r3,col_r3)=源码_模块程序.shai(row_r2,col_r2)

# 将AD号码、宽带帐号续接为一列
(row_xu,col_xu)=源码_模块程序.xu(row_s3,col_s3,row_r3,col_r3)

# 去除重复帐号
(row_14,col_14)=源码_模块程序.chong(row_xu,col_xu)

# 将结果写入工作表中
nws=源码_模块程序.xie(row_14,col_14,nws,col_3,col_4,col_5)

# 保存工作簿
nwb.save(NAME_O)

源码_模块程序.py

###################### # 去除列的空格、方括号 # #######################
def quKF(row_s1,col_s1):
    '''
    输入col_s1:  将要去除空格、方括号的列值列表
    输出col_r1:  在去除空格、方括号后,返回列值列表(行序不变)
    '''
    col_r1=[item.strip().replace('[', '').replace(']', '').replace(' ', '') for item in col_s1]
    row_r1=row_s1
    return row_r1,col_r1

################### # 按逗号分列,并更新原始行序 # ####################
def dou(row_s2,col_s2):
    '''
    输入row_s2、col_s2:  行序列表、需要按逗号分列的列值列表
    输出row_r2、col_r2:  对应的原始行序列表、分列归一后的列值列表
    '''
    col_r2=[]
    row_r2=[]
    i=0
    for u in col_s2:
        col_u2=u.split(',')
        for uu in col_u2:
            col_r2.append(uu)
            row_r2.append(row_s2[i])
        i+=1
    return row_r2,col_r2 # row_r2为行序,col_r2为列值

############### # 筛选符合条件的列值,并更新原始行序 # ################
def shai(row_s3,col_s3):
    '''
    输入row_s3、col_s3:  行序列表、列值列表
    输出row_r3、col_r3:  更新后的行序列表、更新后的列值列表
    '''
    col_r3=[]
    row_r3=[]
    f=0
    for k in col_s3:
        if (k.startswith('0315') or k.startswith('ts') or k.startswith('tsaz')) and ('@' not in k):
            col_r3.append(k)
            row_r3.append(row_s3[f])
        f+=1
    return row_r3,col_r3 # row_r3为行序,col_r3为列值

#################### # 续接两列,并更新原始行序 # #####################
def xu(row_f,col_f,row_b,col_b):
    '''
    输入1、2:row_f,col_f:  续接在前的行序、列值
    输入3、4:row_b,col_b:  续接在后的行序、列值
    '''
    row_f.extend(row_b)
    col_f.extend(col_b)
    return row_f,col_f # row_r4为行序,col_r4为列值

##################### # 将结果逐个写在xls表格里 # #####################
def xie(row_s5,col_s5,nws,coln_1,coln_2,coln_3):
    '''
    row_s5、col_s5:  要写入的行序、列值
    nws:  要写入的工作表对象
    coln_1、coln_2、coln_3:  跟踪信息(如大VLAN、小VLAN、OLT名称等)
    '''
    rs=0
    for yi in row_s5:
        nws.write(rs,0,col_s5[rs])
        nws.write(rs,1,coln_1[yi])
        nws.write(rs,2,coln_2[yi])
        nws.write(rs,3,coln_3[yi])
        rs+=1
    return nws

#################### # 帐号去重,并更新原始行序 # #####################
def chong(row_s6,col_s6):
    row_r6=[]
    col_r6=[]
    g=0
    for t in col_s6:
        if t not in col_r6:
            col_r6.append(t)
            row_r6.append(row_s6[g])
        g+=1
    return row_r6,col_r6

结果展示:

 


        总结:虽然处理这个xls表格在工作中已经接近尾声,且部分程序借鉴了ChatGPT提供的思路,但我仍从中学习到了很多知识!HAPPY (´▽`ʃ♡ƪ)!


参考资料:

  • 太多了,这里暂时就不一一列出来了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值