IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【python脚本实际使用案例】编写一个python脚本对当前的xls文件数据进行转化 xlrd和xlwt两个包的实际使用案例 -> 正文阅读

[Python知识库]【python脚本实际使用案例】编写一个python脚本对当前的xls文件数据进行转化 xlrd和xlwt两个包的实际使用案例

事件背景

当前实习中,事情发生在昨天,导师在外出差,原本这段时间没有啥任务,让我们这批实习生有时间做自己的毕设,偶尔有bug需要改一下,然后昨天导师远程给我丢了一个excel文件,让我处理一下,把整个表的数据给转换到另一个xls表里去,然后我打开看了一下数据,有2400多行,我滴个乖乖,但是一开始我还是老老实实在那儿复制粘贴,因为有些东西还是需要自己进行人为的判断,昨天上午10点钟给我发的任务,但是在那儿复制粘贴到了11点半的样子,我才粘了300多行,一直重复这一机械性劳动,让我心态裂了,然后我不想粘了,开始找其他方法
虽然我是一个java的后端开发者,但之前在学校也使用python写过一些程序,而且python用来写一些小工具是真的好用,然后我就尝试去用py写一个转换的程序

最后写出的py脚本

脚本如下:

import xlrd
import xlwt

result = []
list = ['类型','名称','单位','使用年限','物资类别']
def read_xls():
    book = xlrd.open_workbook('E:\QC\桌面\origin.xls')
    # book1 = book.sheet_names()
    sheet1 = book.sheet_by_name("新固定资产目录")
    print(sheet1)
    rows = sheet1.nrows
    print(rows)

    label1 = ""
    label2 = ""
    for i in range(1,rows):
        add = []
        # col1 = sheet1.cell_value(i,0)
        col2 = sheet1.cell_value(i,1)
        col3 = sheet1.cell_value(i,2)
        col4 = sheet1.cell_value(i,3)
        col5 = sheet1.cell_value(i,4)
        col6 = sheet1.cell_value(i,5)
        col7 = sheet1.cell_value(i,6)
        # 跳过一级目录
        if col2 == '':
            continue
        # 二级目录 更新当前标签1
        elif col2 != '' and col3 == '':
            label1 = col5.strip()
        # 三级目录 更新 标签2
        elif col3 != '' and col4 == '':
            label2 = col5.strip()
        else: # 需要添加的信息
            add.append(label1+'.'+label2)
            add.append(col5.strip())
            add.append(col6)
            if col7 == '':
                add.append(0)
            else:
                add.append(int(col7))
            result.append(add)
            # print("1:"+result)
    print(result)
    print(len(result))

    write_xls()
        # if j == 1 :  测试通过  excel的位置为空时
        #     print("第二列")
        #     if sheet1.cell_value(i,j) == '':
        #         print("第二列为空")
        #     else:
        #         print("第二列内容为"+sheet1.cell_value(i,j)+"end")

        # cell = sheet1.cell_value(i,j)
        # print(cell)

def write_xls():

    #创建工作簿
    book = xlwt.Workbook()
    #创建工作表
    sheet = book.add_sheet("转换后的文档")

    for j in range(5):
        sheet.write(0,j,list[j])
    for i in range(len(result)):
        for k in range(4):
            sheet.write(i+1, k, result[i][k])
    book.save("py输出文件结果.xls")

if __name__ == '__main__':
    read_xls()

上述脚本功能描述

上述的脚本大致功能为将下面这张图的信息转化为
在这里插入图片描述
转换为如下的形式:
在这里插入图片描述
主要是将前面的那种层级关系写为多行的形式转换为单个列的形式二级目录和三级目录用一个“.”进行分隔开(如上图转换后的结果列“类型”)

这个自己亲自去把它给Ctrl c v弄过去也行 但是数量级上来后 一直在那儿反复的 c v 是一个很枯燥的过程,因为在那儿复制粘贴了半个多小时 我才处理300行眼睛都看疼了,更何况这个excel发给我的时候是有2400多行 于是心态炸了,所以就有了这个脚本

该脚本使用的工具包

主要是两个xlrd和xlwt
参考内容:https://www.cnblogs.com/Forever77/p/11135124.html
它们俩分别的作用:
因为脚本的功能要涉及xls文件的读取和写入,所以import了这两个包xlrd用于读取xls文件 xlwt用于写入xls文件

关于xlrd的使用:

1、首先要导入xlrd 也就是import xlrd 它即可读取xls文件也可读取xlsx文件
2、获取一个工作簿对象: book = xlrd.open_workbook(‘excel文件名称’)
3、获取所有工作表名称:names = book.sheet_names()
4、根据索引获取工作表对象:sheet = book.sheet_by_index(i) 索引下标i从0开始,之前在我调试的时候,直接写了个2 原本想读第二个sheet 结果就是数组超限了,呵呵
5、根据名称获取工作表对象:sheet = book.sheet_by_name(‘工作表名称’)
6、获取工作表行数:rows = sheet.nrows
7、获取工作表列数:cols = sheet.ncols
8、获取工作表某一行的内容:row = sheet.row_values(i) 结果为列表 [sheet.row(i) 列表]
9、获取工作表某一列的内容:col = sheet.col_values(i) 结果为列表 [sheet.col(i) 列表]
10、获取工作表某一单元格的内容:cell = sheet.cell_value(m,n) 、sheet.cell(m,n).value、sheet.row(m)[n].value,sheet.col(n)[m].value,结果为字符串或数值
第十条较为重要 一般会用于根据每个单元格的内容来判断它的类型

关于xlwt的使用:

1、使用xlwt模块之前需要先导入import xlwt,xlwt模块只能写xls文件,不能写xlsx文件(写xlsx程序不会报错,但最后文件无法直接打开,会报错)。
2、创建工作簿:book = xlwt.Workbook(),如果写入中文为乱码,可添加参数encoding = ‘utf-8’
3、创建工作表:sheet = book.add_sheet(‘Sheet1’)
4、向单元格写入内容:sheet.write(m,n,‘内容1’)、sheet.write(x,y,‘内容2’)
5、保存工作簿:book.save(‘excel文件名称’),默认保存在py文件相同路径下,如果该路径下有相同文件,会被新创建的文件覆盖,即xlwt不能修改文件。

写脚本的一点心得

写一个脚本其实也还是需要花费一定的时间,因为如果你不熟悉这个工具的话,首先你得去查这个工具如何使用(也就是如何使用某个包的方法 ),学会使用后你要开始写你的脚本,然后去验证你的逻辑是否正确,2400行的数据 我不可能一开始上来就直接输出,一般都是先拿10行或20行来判断自己写的东西是否正确,发现问题就及时修改,然后修改完逻辑错误后,就执行,写脚本这东西就是这样 写个脚本并验证完其正确性后可能1个小时,但执行起来也就几秒钟,总之就是非常快速的得到你想要的结果,比起人工来判断并输出结果快很多

而对于处理这种excel文件时 ,一般分为三个步骤:
1、读取文件信息到内存
2、处理筛选信息为我想要的格式
3、输出文件信息

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:18:55  更:2022-03-16 22:19:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:01:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码