• python——xlrd、xlwt、xlutils模块


    主要包括三个功能,读取excel数据,将数据写入excel并保存,在excel中追加数据并保存

    三个主要模块:  xlrd  xlwt  xlutils

    1.数据的读取

      (1)打开一个工作簿

      (2)获取sheet表单

      (3)通过sheet表单进行按行或按列读取

    import xlrd
    
    #----打开工作簿---------
    work_book = xlrd.open_workbook('实验.xlsx')
    
    #---获取sheet表单-------
    sheet_names = work_book.sheet_names()
    sheet_first = work_book.sheet_by_name(sheet_names[0])  #获取了第一个表单
    
    #---通过sheet表单进行按行或按列读取---
    #按行读取---
    nrows = sheet_first.nrows
    print(nrows)
    for i in range(nrows):
        print(sheet_first.row_values(i))  #读取第i行
    
    #按列读取---
    ncols = sheet_first.ncols
    for j in range(ncols):
        print(sheet_first.col_values(j))
    
    #---获取单元格信息------
    print(sheet_first.cell_value(1,0))  #excel表格中 行列号是从零开始的

    2.数据的写入

      (1)创建一个工作簿

      (2)在工作簿中添加一个表单

      (3)写表头

      (4)写内容

      (5)保存

    import xlwt
    head = ['姓名', '年龄', '学号', '年级']
    
    data = [
            ['小红', 10.0, 19910.0, '三年级'],
            ['小明', 10.0, 19911.0, '三年级'],
            ['小刚', 11.0, 19912.0, '三年级'],
            ['小黑', 12.0, 19913.0, '三年级']
            ]
    
    #---创建一个工作簿---
    work_book = xlwt.Workbook(encoding = 'utf-8')
    
    #---在工作簿中添加一个表单---
    sheet = work_book.add_sheet(sheetname = '学生信息')
    
    #---写表头---
    for i in range(len(head)):      #设置循环的次数,head的长度就是列数
            sheet.write(0,i,head[i])
    
    #---写内容---
    for i in range(len(data)):
            for j in range(len(head)):
                    sheet.write(i+1,j,data[i][j])
    
    #---保存---
    work_book.save(r'C:UsersAdministratorDesktop实验结果.csv')

    3.数据的追加

      (1)打开工作簿

      (2)读取第一个表单

      (3)读取里面写入的行数

      (4)将xlrd的workbook编程xlwt workbook对象

      (5)写入信息

    import xlrd,xlwt
    from xlutils.copy import copy
    info = [['天天',9,14599,'一年级'],
             ['小熊',15,20322,'八年级'],
             ['小白',14,19322,'七年级']]
    
    #---打开工作簿---
    work_book = xlrd.open_workbook('实验结果.csv')
    
    #---获取第一个表单---
    sheet_names = work_book.sheet_names()
    sheet_first = work_book.sheet_by_name(sheet_names[0])
    
    #---读取里面写入的行数---
    nrows = sheet_first.nrows
    
    #---将xlrd的workbook变成xlwtworkbook对象
    work_book_new = copy(work_book)
    
    #---写入信息---
    new_sheet = work_book_new.get_sheet(0)
    
    #写入行数
    i = nrows
    for item in info:
            for j in range(sheet_first.ncols):
                    new_sheet.write(i,j,item[j])
                    #写完一行,行数+1
            i += 1
    
    work_book_new.save(r'C:UsersAdministratorDesktop实验结果.csv')

    应用:

    import pandas as pd
    import os
    import xlrd,xlwt
    from xlutils.copy import copy
    
    path=r"C:UsersAdministratorDesktop一_3日间分时段"
    df_f=pd.DataFrame([])
    
    #---创建文件,写表头---
    list = ['六时','七时','八时','九时','十时','十一时','十二时','十三时','十四时','十五时','十六时','十七时']
    ti = 0
    head = ['预警类型',1,2,3,4,5,6]
    work_book = xlwt.Workbook(encoding = 'utf-8')     #以写入的方式打开文档,没有则会新建一个文档
    sheet = work_book.add_sheet(sheetname = '统计数据')   #在工作簿中添加表单并定义表单名
    #---写表头---
    for i in range(len(head)):      #设置循环的次数,head的长度就是列数
        sheet.write(0,i,head[i])      #设置写入第0行,第i列,内容为 head[i]
    work_book.save('结果.csv')      #保存文件,传入保存路径
    
    for filename in os.listdir(path):
        #---读取工作簿中的内容---
        #--打开工作簿--
        work_book = xlrd.open_workbook(filename)
    
        #---获取sheet表单-------
        sheet_names = work_book.sheet_names()
        sheet_first = work_book.sheet_by_name(sheet_names[0])  #获取了第一个表单
    
        #按列读取---
        ncols = sheet_first.ncols
        l14 = sheet_first.col_values(14)
    
        # ---统计次数---
        s1 = 0
        s2 = 0
        s3 = 0
        s4 = 0
        s5 = 0
        s6 = 0
        for i in range(len(l14)):
    
            if l14[i] == 1.0:
                s1 += 1
            if l14[i] ==2.0:
                s2 += 1
            if l14[i] == 3.0:
                s3 += 1
            if l14[i] == 4.0:
                s4 += 1
            if l14[i] == 5.0:
                s5 += 1
            if l14[i] == 6.0:
                s6 += 1
    
        res = [s1,s2,s3,s4,s5,s6]
    
        data = [list[ti]]
        for i in res:
            d = i/len(l14)*100
            ret = ('%.2f%%'%d)
            data.append(ret)
    
        print(data)
    
        #--------追加内容----------
        #---打开工作簿---
        work_book = xlrd.open_workbook('结果.csv')    #以读的方式打开工作簿
    
        #---获取第一个表单---
        sheet_names = work_book.sheet_names()   #获取工作簿中所有的表单名
        sheet_first = work_book.sheet_by_name(sheet_names[0])   #定位到第一个表单
    
        #---读取里面写入的行数---
        nrows = sheet_first.nrows
    
        #---将xlrd的workbook变成xlwt workbook对象
        work_book_new = copy(work_book)         #将工作簿变为可写入状态
    
        #---写入信息---
        new_sheet = work_book_new.get_sheet(0)  #锁定第一张表单
    
        #写入行数
        i = nrows
        for j in range(len(data)):
            new_sheet.write(i,j,data[j])    #写入数据,第i行,第j列,内容为data[j]
    
        ti +=1
        work_book_new.save('结果.csv')    #将工作簿保存
  • 相关阅读:
    [Luogu] P3258 [JLOI2014]松鼠的新家
    [Luogu] P3701 「伪模板」主席树
    [USACO] 打井 Watering Hole
    [Luogu] P3225 [HNOI2012]矿场搭建
    [USACO06JAN] 冗余路径 Redundant Paths
    [Luogu] P1407 [国家集训队]稳定婚姻
    [USACO06JAN] 牛的舞会 The Cow Prom
    [Luogu] P4254 [JSOI2008]Blue Mary开公司
    [Luogu] P1993 小K的农场
    [Luogu] P2279 [HNOI2003]消防局的设立
  • 原文地址:https://www.cnblogs.com/jgua/p/13693322.html
Copyright © 2020-2023  润新知