美文网首页8 分钟系列
用 python 读写 excel 文件

用 python 读写 excel 文件

作者: 空之古城 | 来源:发表于2018-10-22 22:16 被阅读20次

    介绍

    python-excel 是一组用 python 实现的 excel 文件访问库,包括 xlrdxlwtxlutils 三个模块。这里介绍一下它的基本用法,大约需要 10 分钟阅读。

    安装

    mac 上的安装命令

    sudo pip install xlrd
    sudo pip install xlwt
    sudo pip install xlutils
    

    扩展:其他的安装方式参见这里

    读文件

    读文件示例代码如下:

    # -*- coding: utf-8 -*- 
    
    import sys  
    reload(sys)  
    sys.setdefaultencoding('utf8')  
    import xlrd
    
    def read_file(file_path):
        book = xlrd.open_workbook(file_path) #得到 Excel 文件的 book 对象,实例化对象
        sheet = book.sheet_by_index(0) # 通过 sheet 索引获得 sheet 对象
        ncols = sheet.ncols # 列数
        nrows = sheet.nrows # 行数
        print("row count:{:d}, column count:{:d}".format(nrows, ncols))
        for row in range(nrows):
            print(sheet.row_values(row))
    
    if __name__ == '__main__':
        read_file("test.xls")
    

    当然也可以逐个 cell 地读取文件,代码如下:

    # -*- coding: utf-8 -*- 
    
    from __future__ import print_function
    import sys  
    reload(sys)  
    sys.setdefaultencoding('utf8')  
    import xlrd
    
    def read_file(file_path):
        book = xlrd.open_workbook(file_path)
        sheet = book.sheet_by_index(0)
        ncols = sheet.ncols
        nrows = sheet.nrows
        for row in range(nrows):
            for col in range(ncols):
                print(sheet.cell_value(row, col), end='')
                print('\t', end='')
            print("")
    
    if __name__ == '__main__':
        read_file("test.xls")
    

    扩展:xlrd 的 Api 文档在这里

    写文件

    写文件的示例代码如下:

    # -*- coding: utf-8 -*- 
    import sys  
    reload(sys)  
    sys.setdefaultencoding('utf8')  
    import xlwt
    
    def get_data():
        data = []
        data.append(["id", "value"])
        for i in range(10):
            col_data = []
            col_data.append(i)
            col_data.append(i * 10)
            data.append(col_data)
        return data
    
    def write_file(file_path, sheet_name, data):
        book = xlwt.Workbook(encoding = 'utf-8')
        sheet = book.add_sheet(sheet_name)
        row = 0
        for row_data in data:
            col = 0
            for cell_data in row_data:
                sheet.write(row, col, cell_data)
                col += 1
            row += 1
        book.save(file_path)
    
    if __name__ == '__main__':
        data = get_data()
        write_file("test.xls", "test sheet", data)
    

    扩展:xlwt 的 Api 文档在这里

    过滤文件示例

    下面这个过滤文件的示例,是 excel 文件读写的综合应用:

    # -*- coding: utf-8 -*- 
    
    import sys  
    reload(sys)  
    sys.setdefaultencoding('utf8')  
    import xlrd
    import xlwt
    
    # 过滤掉第二列元素等于 keyword 的数据所在行
    def filter_file(src_file, src_sheet_name, desc_file, desc_sheet_name, keyword):
        src_book = xlrd.open_workbook(src_file)
        src_sheet = src_book.sheet_by_name(src_sheet_name)
    
        desc_book = xlwt.Workbook(encoding = 'utf-8')
        desc_sheet = desc_book.add_sheet(desc_sheet_name)
    
        ncols = src_sheet.ncols
        nrows = src_sheet.nrows
        index = 0
        for row in range(nrows):
            content = src_sheet.cell_value(row, 1)
            if content == keyword:
                continue
            for col in range(ncols):
                desc_sheet.write(index, col, src_sheet.cell_value(row, col))
            index += 1
    
        desc_book.save(desc_file)   
    
    if __name__ == '__main__':
        filter_file("test.xls", "test sheet", "test_desc.xls", "test sheet", 30)
    

    上述例子中的 test.xls 文件内容为:

    id value
    0 0
    1 10
    3 30
    2 20
    4 40
    5 50
    6 60
    7 70
    8 80
    9 90

    高级用法

    xlutils 的使用,留在以后分享。

    相关文章

      网友评论

        本文标题:用 python 读写 excel 文件

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