首页 > 编程语言 >python 读取、写入、追加、覆盖xls文件

python 读取、写入、追加、覆盖xls文件

时间:2023-05-29 16:14:31浏览次数:38  
标签:sheet 读取 python data filename row xls name

python 读取、写入、追加、覆盖xls文件

0、写在前面

测试源xls是这样的

image-20230529154735527

1、读取xls

def read_xls(filename: str, sheet_name: str) -> List[list]:
    filename = os.path.abspath(filename)
    assert os.path.isfile(filename), f'{filename} is not file'
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    wb: Book = xlrd.open_workbook(filename)
    sheet_names = wb.sheet_names()
    assert sheet_name in sheet_names, 'sheet name error'
    sheet: Sheet = wb.sheet_by_name(sheet_name)
    all_data = []
    for row_x in range(sheet.nrows):
        row = []
        for col_x in range(sheet.ncols):
            row.append(sheet.cell(row_x, col_x).value)
        all_data.append(row)
    print("all data".center(50, '*'))
    for one in all_data:
        print(one)
    return all_data

运行

image-20230529154819764

2、写入xls

def write_xls(filename: str, sheet_name: str, data: List[list]):
    filename = os.path.abspath(filename)
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    if not os.path.exists(os.path.dirname(filename)):
        os.makedirs(os.path.dirname(filename))
    wb: Workbook = xlwt.Workbook(filename)
    sheet: xlwt.Worksheet = wb.add_sheet(sheet_name)
    for row_x, row in enumerate(data):
        for clo_x, clo in enumerate(row):
            sheet.write(row_x, clo_x, clo)
    wb.save(filename)
    print(f"保存到路径:{filename}")

运行

image-20230529154906919

3、覆盖xls

def cover_xls(filename: str, sheet_name: str, data: List[list]):
    filename = os.path.abspath(filename)
    assert os.path.isfile(filename), f'{filename} is not file'
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    wb: Book = xlrd.open_workbook(filename)
    assert sheet_name in wb.sheet_names(), 'sheet name error'

    wb2: xlwt.Workbook = copy(wb)
    sheet2: xlwt.Worksheet = wb2.get_sheet(sheet_name)
    for row_x, row in enumerate(data):
        for clo_x, clo in enumerate(row):
            sheet2.write(row_x, clo_x, clo)
    wb2.save('over.xls')

运行

image-20230529155059663

4、追加xls

def append_xls(filename: str, sheet_name: str, data: List[list]):
    filename = os.path.abspath(filename)
    assert os.path.isfile(filename), f'{filename} is not file'
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    wb: Book = xlrd.open_workbook(filename)
    sheet: Sheet = wb.sheet_by_name(sheet_name)
    assert sheet_name in wb.sheet_names(), 'sheet name error'

    wb2: xlwt.Workbook = copy(wb)
    sheet2: xlwt.Worksheet = wb2.get_sheet(sheet_name)
    n_rows = sheet.nrows
    for row_x, row in enumerate(data):
        for clo_x, clo in enumerate(row):
            sheet2.write(row_x + n_rows, clo_x, clo)
    wb2.save('append.xls')

运行

image-20230529155213151

5、代码汇总

import os
from typing import List

import xlrd
import xlwt
from xlrd import Book
from xlrd.sheet import Sheet
from xlutils.copy import copy
from xlwt import Workbook


def read_xls(filename: str, sheet_name: str) -> List[list]:
    filename = os.path.abspath(filename)
    assert os.path.isfile(filename), f'{filename} is not file'
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    wb: Book = xlrd.open_workbook(filename)
    sheet_names = wb.sheet_names()
    assert sheet_name in sheet_names, 'sheet name error'
    sheet: Sheet = wb.sheet_by_name(sheet_name)
    all_data = []
    for row_x in range(sheet.nrows):
        row = []
        for col_x in range(sheet.ncols):
            row.append(sheet.cell(row_x, col_x).value)
        all_data.append(row)
    print("all data".center(50, '*'))
    for one in all_data:
        print(one)
    return all_data


def write_xls(filename: str, sheet_name: str, data: List[list]):
    filename = os.path.abspath(filename)
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    if not os.path.exists(os.path.dirname(filename)):
        os.makedirs(os.path.dirname(filename))
    wb: Workbook = xlwt.Workbook(filename)
    sheet: xlwt.Worksheet = wb.add_sheet(sheet_name)
    for row_x, row in enumerate(data):
        for clo_x, clo in enumerate(row):
            sheet.write(row_x, clo_x, clo)
    wb.save(filename)
    print(f"保存到路径:{filename}")


def append_xls(filename: str, sheet_name: str, data: List[list]):
    filename = os.path.abspath(filename)
    assert os.path.isfile(filename), f'{filename} is not file'
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    wb: Book = xlrd.open_workbook(filename)
    sheet: Sheet = wb.sheet_by_name(sheet_name)
    assert sheet_name in wb.sheet_names(), 'sheet name error'

    wb2: xlwt.Workbook = copy(wb)
    sheet2: xlwt.Worksheet = wb2.get_sheet(sheet_name)
    n_rows = sheet.nrows
    for row_x, row in enumerate(data):
        for clo_x, clo in enumerate(row):
            sheet2.write(row_x + n_rows, clo_x, clo)
    wb2.save('append.xls')


def cover_xls(filename: str, sheet_name: str, data: List[list]):
    filename = os.path.abspath(filename)
    assert os.path.isfile(filename), f'{filename} is not file'
    assert filename.lower().endswith('.xls'), f'不是.xls文件:{filename}'
    wb: Book = xlrd.open_workbook(filename)
    assert sheet_name in wb.sheet_names(), 'sheet name error'

    wb2: xlwt.Workbook = copy(wb)
    sheet2: xlwt.Worksheet = wb2.get_sheet(sheet_name)
    for row_x, row in enumerate(data):
        for clo_x, clo in enumerate(row):
            sheet2.write(row_x, clo_x, clo)
    wb2.save('over.xls')


def main():
    filename = "src.xls"
    sheet_name = "Sheet1"
    all_data = read_xls(filename, sheet_name)
    write_xls("write.xls", sheet_name, all_data)
    data = [
        ['a', 'b', 'c', 'd'],
        ['A', 'B', 'C', 'D']
    ]
    append_xls(filename, sheet_name, data)
    cover_xls(filename, sheet_name, data)


if __name__ == '__main__':
    main()

标签:sheet,读取,python,data,filename,row,xls,name
From: https://www.cnblogs.com/rainbow-tan/p/17440699.html

相关文章

  • Python使用to_csv导出文件时参数注意事项
    使用to_csv导出文件时,一定要指定index参数和encoding参数这两个参数;index参数:默认为True,会添加一列标记数据索引。encoding参数:如果不指定utf_8_sig,使用默认参数值,则导出的文件可能会有乱码或串列。cake_data.to_csv(r"C:\E\data.csv",index=False,encoding='utf_8_sig')......
  • Python中的Union这个类的使用
    在Python中,Union是typing模块中定义的一个类,用于表示多个类型中的任意一种类型。Union类型可以用于表示参数或函数返回值等多种情况下可能的不同类型。具体而言,Union类型可以使用typing.Union[type1,type2,...]的语法来定义,其中type1、type2等参数为可能的类型。例......
  • Python——基于数据挖掘的上市公司财务造假识别(制造业)
    制造业importpandasaspdimportnumpyasnp%matplotlibinlineimportmatplotlib.pyplotaspltimportseabornassnscolor=sns.color_palette()fromscipyimportstatsfromscipy.statsimportnorm,skewt1=pd.read_csv("制造业.csv")t1_train=t1.d......
  • Python工具箱系列(三十四)
    SQLAlchemy是著名的ORM(ObjectRelationalMapping-对象关系映射)框架。其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。对许多语言(例如JAVA/PYTHON)来说就是定义一个对象,并且这个对象对应着一张数据库的表。而这个对象的实例,就对应着表中的一条记录。其整体思......
  • python:yaml模块
    python:yaml模块https://www.jianshu.com/p/eaa1bf01b3a6https://www.runoob.com/w3cnote/yaml-intro.html......
  • Python压缩JS文件,重点是 slimit
    摘要:PythonWeb程序员必看系列,学习如何压缩JS代码。本文分享自华为云社区《Python压缩JS文件,PythonWeb程序员必看系列,重点是slimit》,作者:梦想橡皮擦。本篇博客将学习压缩JS代码,首先要学习的模块是jsmin。jsmin库Python中的jsmin库来压缩JavaScript文件。这个库......
  • Python连接Redis
    1、操作模式redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。 2、连接池redis-py使用connectionpool来管理对一个redisserver的所有连接,避免......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-1-环境准备与搭建
    1.简介有很多人私信留言宏哥问能不能介绍一下Playwright这款自动化神器的相关知识,现在网上的资料太少了。其实在各大博客和公众号也看到过其相关的介绍和讲解。要不就是不全面、不系统,要不就是系统全面但是人家是收费的。当然了宏哥接下来也可能介绍的不全面或者不系统,能力有限望......
  • Python generator 构建协程,实现异步编程(使用yield构建消息处理者和消息创造者)
    协程的定义理解Python协程可以在单个处理机或多个处理机上运行,这取决于具体实现方式。在Python中,主要有两种协程实现方式:生成器协程和asyncio协程。生成器协程只能在单个处理机上运行,因为生成器协程是通过生成器函数实现的,而生成器函数在单个线程中执行。生成器协程也称为......
  • pytorch1.4.0 CUDA11.0 python3.7安装记录
    参考过程CUDA安装教程CUDA教程2找到自己电脑显卡的cuda版本CUDA是什么版本是11.0.140安装CUDA11.1下载链接,但是我们不用这个我们用的是11.0最新版的下载地址下载选项设置(害,整整2个多G啊)。可以在下载按钮的地方右键,复制链接,然后在迅雷下面下载。虽然慢但是稳定。不过用Chrome复......