PythonXlsxManger

由于工作中偶尔需要编写一些表格数据处理脚本,而其中大部分代码都是重复的,所以为了更好的开发效率,我决定将日常表格管理脚本中用到的基础功能集合起来并使用开源都方式共享,同时也希望有更多人能够一起完善。

简介

PythonXlsxManger Gitee项目(Python Linux基础模块: pxm)是使用Python3基于现有openpyxl模块编写的表格读写基础模块,实现常用功能。
在模块设计上,借鉴了Shell语言管道的特性,可一步步截取数据(Cut开头的函数)

特色

  • 使用全中文注释,即使小白也能轻松上手
  • 完全开源、永久免费

使用方法

安装

具体可以访问Pypi项目地址https://pypi.org/project/pxm

pip3 install --upgrade pxm-liumou-Stable

查看所有功能

import pxm_liumou_Stable
print(help(pxm_liumou_Stable))

每个版本的函数功能会存在差异,请以安装的版本显示的清单为准

效果

"C:\Program Files\Python310\python.exe" D:/code/Coding/gsgl/第三套丢失的附件/vars.py 
Help on package pxm_liumou_Stable:

NAME
    pxm_liumou_Stable

DESCRIPTION
    @File    :   pxm_liuyi778_Stable.py
    @Time    :   2023-02-17 22:58
    @Author  :   坐公交也用券
    @Version :   1.0
    @Contact :   faith01238@hotmail.com
    @Homepage : https://liumou.site
    @Desc    :   当前文件作用

PACKAGE CONTENTS
    dic
    exists
    pxm
    read
    write

CLASSES
    builtins.object
        pxm_liumou_Stable.read.Read
        pxm_liumou_Stable.write.Write
    
    class Read(builtins.object)
     |  Read(filename)
     |  
     |  Methods defined here:
     |  
     |  __init__(self, filename)
     |      读取表格数据
     |      :param filename: 需要读取的表格文件
     |  
     |  base(self)
     |      打印表格文件基础信息
     |      :return:
     |  
     |  cut_column(self, col=0)
     |      对已读取的数据进行列截取
     |      :param col: 需要截取的列
     |      :return:
     |  
     |  cut_column_range(self, start=0, end=1)
     |      对已读取的数据进行 列范围 截取
     |      :param start: 起始列
     |      :param end: 结束列
     |      :return:
     |  
     |  cut_line(self, n=0)
     |      对已读取的数据进行截取指定行
     |      :param n: 需要读取的行
     |      :return: 取结果(bool),获取数据请通过实例变量(DataR)获取
     |  
     |  cut_line_range(self, start=0, end=1)
     |      对已读取的数据进行 行范围 截取
     |      :param start: 起始行
     |      :param end: 结束行
     |      :return: 取结果(bool),获取数据请通过实例变量(DataR)获取
     |  
     |  get_all(self)
     |      获取指定Sheet所有数据,可通过Set函数设置指定Sheet
     |      :return:
     |  
     |  get_column_range(self, start=0, end=1)
     |      读取列范围
     |      :param start: 起始列
     |      :param end: 结束列
     |      :return: 获取结果(bool),获取数据请通过实例变量(DataR)获取
     |  
     |  get_line_range(self, start=0, end=1)
     |      读取行范围(1是第一行)
     |      :param start: 起始行
     |      :param end: 结束行
     |      :return:获取结果(bool),获取数据请通过实例变量(DataR)获取
     |  
     |  read_col(self, col=1)
     |      读取某列所有数据
     |      :param col: 需要读取的列
     |      :return:
     |  
     |  read_line(self, row=1)
     |      读取某行数据
     |      :param row: 需要读取的行
     |      :return:
     |  
     |  set(self, debug=False, sheet_name=None, sheet_index=None)
     |      自定义设置
     |      :param debug: 是否开启Debug
     |      :param sheet_name: 通过工作簿名称选择,当设置了此项切勿再设置索引(默认通过索引设置/当同时设置则优先使用索引值)
     |      :param sheet_index: 通过工作簿索引值选择(默认:0)
     |      :return:
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  __dict__
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)
    
    class Write(builtins.object)
     |  Write(filename, create=True)
     |  
     |  Methods defined here:
     |  
     |  __init__(self, filename, create=True)
     |      写入表格数据
     |      :param filename: 需要写入的表格文件
     |      :param create: 是否自动创建文件
     |  
     |  create_sheet(self, name, index=None)
     |      创建sheet
     |      :param name: 新sheet的名称
     |      :param index: 设置sheet排序位置(0是排第一)
     |      :return: 创建结果
     |  
     |  delete_line(self, index, row=1)
     |      删除行数据
     |      :param index: 需要删除的起始行
     |      :param row: 需要删除的行数总数,默认删除1行(也就是起始行)
     |      :return: 删除结果
     |  
     |  set(self, add=True, head=True, line=None, speed_sum=100, serial_number=False)
     |      设置写入参数
     |      :param add: 是否使用追加模式(默认: True)
     |      :param head: 是否保留表头标题(默认: True)
     |      :param line: 是否自定义写入的行,如果需要自定义,请传所在行的整数
     |      :param speed_sum: 写入多少行数据进行一次进度显示
     |      :param serial_number: 是否自动添加序号(默认False)
     |      :return:
     |  
     |  set_center(self, whole=True, line=None, col=None, lines=None, cols=None)
     |      设置居中,此功能会遍历所有参数进行居中设置(如果设置了全局则忽略后面的参数)
     |      :param whole: 全局居中(bool)
     |      :param line: 指定行居中(int)
     |      :param col: 指定列居中(int)
     |      :param lines: 指定行范围居中,通过列表传入需要居中的行([int, int])
     |      :param cols: 指定列范围居中,通过列表传入需要居中的列([int, int])
     |      :return:
     |  
     |  update_line(self, row, data_list)
     |      更新某行数据
     |      :param row: 需要更新的行
     |      :param data_list: 行数据列表
     |      :return:
     |  
     |  write_add_col(self, col, data)
     |      写入一列数据
     |      :param col: 列数
     |      :param data: 数据
     |      :return:
     |  
     |  write_add_line(self, data)
     |      追加写入一行数据
     |      :param data: 数据,以列表形式 ["张三", "男", "33"]
     |      或者字典模式1: {"A": "刘某", "B": "男", "C": "22"}
     |      字典模式2: {1: 1, 2: 2, 3: 3}
     |      :return:
     |  
     |  write_cover_lists(self, lists)
     |      通过列表方式覆盖写入数据,一次性最多写入104万行数据
     |      :param lists: 写入数据列表,例如: [["张三", "男", "33"], ["李四", "男", "32"]]
     |      :return:
     |  
     |  write_lists(self, lists)
     |      通过列表方式追加写入数据,一次性最多写入104万行数据
     |      :param lists: 写入数据列表,例如: [["张三", "男", "33"], ["李四", "男", "32"]]
     |      :return:
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  __dict__
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__
     |      list of weak references to the object (if defined)

DATA
    __all__ = ['Read', 'Write']

FILE
    c:\users\y\appdata\roaming\python\python310\site-packages\pxm_liumou_stable\__init__.py

Demo

读取

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
"""
@File    :   demo.py
@Time    :   2023-02-17 23:36
@Author  :   坐公交也用券
@Version :   1.0
@Contact :   faith01238@hotmail.com
@Homepage : https://liumou.site
@Desc    :   当前文件作用
"""
from ColorInfo import ColorLogger

from pxm_liumou_Stable import Read


class Demo:
	def __init__(self, filename="xls/demo.xlsx"):
		"""

        :param filename:
        """
		self.filename = filename
		self.logger = ColorLogger(class_name=self.__class__.__name__)
		self.r = Read(filename=self.filename)  # 读取文件
		self.r.set(sheet_index=1)  # 设置Sheet索引值1(也就是第二个Sheet)
		self.r.get_all()  # 获取所有数据

	def all(self):
		if self.r.Err:
			self.logger.error("读取失败: ", r.Err)
		else:
			self.logger.info("数据读取成功")
			print(self.r.DataR)

	def line(self):
		data = self.r.cut_line(0)  # 截取第一行并获取最终结果
		print("第一行的数据: ", data.DataR)

	def start(self):
		self.all()
		self.line()
		self.info()

	def info(self):
		print(f"当前工作簿数据总列数: {self.r.InfoCols}")
		print(f"当前工作簿数据总行数: {self.r.InfoRows}")
		print(f"当前工作簿索引值: {self.r.InfoSheet}")
		print(f"当前工作簿名称: {self.r.InfoSheetName}")


if __name__ == "__main__":
	d = Demo()
	d.start()

效果

2023-02-21 11:17:14 demo.py  line: 33 - Class: Demo Function: all - INFO : 数据读取成功
[['专业', '人数'], ['网络', 3], ['安全', 3]]
第一行的数据:  ['专业', '人数']
当前工作簿数据总列数: 2
当前工作簿数据总行数: 3
当前工作簿索引值: 1
当前工作簿名称: Sheet2

更新日志

  • 1.1.1: 统一函数前缀

问题反馈

点击链接加入QQ群聊【坐公交也用券