人生苦短我用Python Excel文件基本操作

news/2024/9/17 7:37:38/ 标签: python, excel

人生苦短我用Python Excel文件基本操作

  • 前言
  • 文件基本操作的模块和类
    • pathlib.Path 类
    • os.stat_result 类
    • time.struct_time 命名元组
    • time 模块
    • shutil 模块
  • 示例
    • 查看属性
    • 拷贝文件
    • 重命名文件
    • 查找文件
    • 批量操作
  • 测试

前言

本文主要介绍通过Python中的pathlib模块,完成Excel文件基本操作,如查看文件属性,拷贝文件,重命名文件,查找文件等。

文件基本操作的模块和类

pathlib.Path 类

pathlib — Object-oriented filesystem paths

This module offers classes representing filesystem paths with semantics appropriate for different operating systems. Path classes are divided between pure paths, which provide purely computational operations without I/O, and concrete paths, which inherit from pure paths but also provide I/O operations.

pathlib 是 Python 3.4 引入的一个面向对象的文件系统路径库,它提供了一种更直观、更易读的方式来处理文件和目录路径。

pathlib模块提供了表示文件系统路径的类,适用于不同的操作系统。

PurePath
PurePosixPath
Path
PureWindowsPath
PosixPath
WindowsPath
  • Path 类是文件系统路径库的核心类。

  • PosixPathpathlib 库中的一个类,专门用于表示 POSIX 兼容的文件系统路径,如 Unix、Linux 和 macOS 系统。

  • PureWindowsPathpathlib 库中的一个类,专门用于表示 Windows 文件系统路径。

  • 路径信息

属性说明
parent父目录
name文件名
stem不带扩展名的文件名
suffix文件扩展名
  • 方法
方法说明
cwd()返回当前路径 同os.getcwd()
absolute()返回绝对路径
/拼接路径
stat(*, follow_symlinks=True)文件或目录的信息
exists()检查路径是否存在
is_file()检查路径是否是文件
is_dir()检查路径是否是目录
mkdir(mode=0o777, parents=False, exist_ok=False)创建目录
rmdir()删除目录
unlink(missing_ok=False)删除文件
iterdir()遍历目录
rename(target)重命名文件或目录
glob(pattern, *, case_sensitive=None)搜索当前目录中匹配特定模式的文件和目录
rglob(pattern, *, case_sensitive=None)递归地搜索当前目录及其子目录中匹配特定模式的文件和目录

os.stat_result 类

Pathstat 方法返回 os.stat_result 对象可获取文件或目录的详细信息。

  • 常用属性
属性说明
st_size文件大小(字节)
st_mtime最后修改时间(时间戳)
st_atime最后访问时间(时间戳)
st_ctime创建时间(时间戳,在某些系统上可能是最后元数据更改时间)
st_atime_ns最后访问时间(纳秒)
st_mtime_ns最后修改时间(纳秒)
st_ctime_ns创建时间(纳秒)

time.struct_time 命名元组

属性说明
tm_year年份
tm_mon月份(1 到 12)
tm_mday月份中的第几天(1 到 31)
tm_hour小时(0 到 23)
tm_min分钟(0 到 59)
tm_sec秒(0 到 59)
tm_wday星期几(0 是星期一,6 是星期日)
tm_yday一年中的第几天(1 到 366)
tm_isdst是否是夏令时(0:否,1:是,-1:未知)

time 模块

  • 常用方法
方法说明
localtime(seconds=None)返回本地时间, struct_time 对象
strftime(format, p_tuple=None)struct_time 对象格式化为字符串
  • 常用的格式化指令
格式化指令说明
%Y四位数的年份
%m两位数的月份(01 到 12)
%d两位数的日期(01 到 31)
%H两位数的小时(00 到 23)
%M两位数的分钟(00 到 59)
%S两位数的秒(00 到 59)

shutil 模块

shutil — High-level file operations

The shutil module offers a number of high-level operations on files and collections of files. In particular, functions are provided which support file copying and removal. For operations on individual files, see also the os module.

Warning: Even the higher-level file copying functions (shutil.copy(), shutil.copy2()) cannot copy all file metadata.

pathlib 模块提供了一种面向对象的方式来处理文件系统路径。要使用 pathlib 拷贝文件,需结合 shutil 模块。

shutil 是 Python 标准库中的一个模块,提供了许多用于文件和目录操作的高级函数。这些函数包括文件复制、目录复制、文件和目录删除等。shutil 模块使得文件和目录操作变得更加简单和高效。

方法说明
copyfile(src, dst, *, follow_symlinks=True)src:源文件的路径,必须是文件。
dst:目标文件的路径,必须是文件。如果目标文件已存在,它将被覆盖。
只复制文件的内容,不复制文件的元数据(如访问时间和修改时间)。
copy(src, dst, *, follow_symlinks=True)src:源文件的路径,必须是文件。
dst:目标文件的路径,可以是文件或目录。如果 dst 是目录,则文件将以相同的名称复制到该目录中。
复制文件内容和权限模式,但不复制元数据。
copy2(src, dst, *, follow_symlinks=True)src:源文件的路径,必须是文件。
dst:目标文件的路径,可以是文件或目录。如果 dst 是目录,则文件将以相同的名称复制到该目录中。
复制文件内容、权限模式和元数据。

示例

  • 新建文件 excel.py,并导入包
python">import shutil
from pathlib import Path
from time import localtime, strftime

查看属性

  • 查看路径信息
python">def path_info(input_path):path = Path(input_path)absolute = path.absolute()  # 绝对路径parent = path.parent  # 文件夹的路径name = path.name  # 文件名stem = path.stem  # 文件主名suffix = path.suffix  # 文件扩展名print(f'absolute: {absolute}')print(f'parent: {parent}')print(f'name: {name}')print(f'stem: {stem}')print(f'suffix: {suffix}')
  • 文件/路径属性
python">def path_stat_info(input_path):path = Path(input_path)file_size = path.stat().st_size  # 文件大小print(f'file size: {file_size}')last_time = path.stat().st_mtime  # 最后修改时间local_time = localtime(last_time)formatted_time = strftime("%Y-%m-%d %H:%M:%S", local_time)print(f'time: {formatted_time}')year = local_time.tm_year  # 年month = local_time.tm_mon  # 月day = local_time.tm_mday  # 日hour = local_time.tm_hour  # 时minute = local_time.tm_min  # 分second = local_time.tm_sec  # 秒print(f'year: {year}')print(f'month: {month}')print(f'day: {day}')print(f'hour: {hour}')print(f'minute: {minute}')print(f'second: {second}')

拷贝文件

python">def copy_file(input_path, output_path):old_path = Path(input_path)new_path = Path(output_path)if old_path.is_file():shutil.copy2(old_path, new_path)

重命名文件

python">def rename_file(input_path, output_path):old_path = Path(input_path)new_path = Path(output_path)if old_path.is_file():old_path.rename(new_path)

查找文件

  • 查找指定目录下Excel文件
python">def list_files(input_path):folder_path = Path(input_path)if not folder_path.is_dir():returnpath_lists = folder_path.glob('*.xls*')names = []for path in path_lists:name = path.namenames.append(name)return names
  • 在指定目录下,精准查找(递归)Excel文件
python">def find_by_file_name(input_path, file_name):folder_path = Path(input_path)find_lists = folder_path.rglob(file_name)names = []for path in find_lists:names.append(str(path.parent / path.name))return names
  • 在指定目录下,模糊查找(递归)Excel文件
python">def find_by_keyword(input_path, keyword):folder_path = Path(input_path)find_lists = folder_path.rglob(f'*{keyword}*.xls*')names = []for path in find_lists:names.append(str(path.parent / path.name))return names

批量操作

  • 批量重命名文件()
python">def rename_files(input_path, output_path, old, name):old_path = Path(input_path)new_path = Path(output_path)if not old_path.is_dir():returnif not new_path.exists():new_path.mkdir(parents=True)old_path_lists = old_path.glob(f'*{old}*.xls*')for old_path in old_path_lists:new_file_name = old_path.name.replace(old, name)copy_file(old_path, new_path / new_file_name)
  • 批量归档Excel(根据最后修改时间,按“年/月”目录分类文档)
python">def archive_by_time(input_path):folder_path = Path(input_path)if not folder_path.is_dir():returnpath_lists = folder_path.glob('*.xls*')for path in path_lists:last_time = path.stat().st_mtimelocal_time = localtime(last_time)year = local_time.tm_yearmonth = local_time.tm_monnew_folder_path = folder_path / str(year) / str(month)print(new_folder_path)if not new_folder_path.exists():new_folder_path.mkdir(parents=True)copy_file(path.absolute(), new_folder_path / path.name)

测试

  • 目录及文件
data
├── 文档1.xlsx
└── 文档2.xls
  • 导入模块
python">import excel
  • 目录属性
python">excel.path_info('data')# 输出
# absolute: /xxx/xxx/data
# parent: .
# name: data
# stem: data
# suffix: 
  • 文件属性
python">excel.path_info('data/文档1.xlsx')# 输出
# absolute: /xxx/xxx/data/文档1.xlsx
# parent: data
# name: 文档1.xlsx
# stem: 文档1
# suffix: .xlsx
  • 精准查找
python">find_list1 = excel.find_by_file_name('data', '文档1.xlsx')
print(f'find by file name : {find_list1}')# 输出
# find by file name : ['data/文档1.xlsx']
  • 模糊查找
python">find_list2 = excel.find_by_keyword('data', '文档')
print(f'find by keyword : {find_list2}')# 输出
# find by keyword : ['data/文档1.xlsx', 'data/文档2.xls']
  • 批量重命名
python">excel.rename_files('data', 'data2', '文档', '归档')# data2
# ├── 归档1.xlsx
# └── 归档2.xls

http://www.ppmy.cn/news/1522545.html

相关文章

【Android面试八股文】你能说说FragmentPagerAdapter 和 FragmentStatePagerAdapter的区别吗?

文章目录 一、FragmentPagerAdapter1.1 工作方式1.2 生命周期1.3 优缺点1.4 适用场景1.5 示例二、FragmentStatePagerAdapter2.1 工作方式2.2 生命周期2.3 优缺点2.4 适用场景2.4 示例三、FragmentPagerAdapter和FragmentStatePagerAdapter关于instantiateItem()方法和destroyI…

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场…

Docker入门学习-01

Docker 官方文档 1. Docker 基础知识 1.1 什么是 Docker? Docker 是一个开源的平台,用于开发、交付和运行应用程序。它使用容器技术,将应用程序及其依赖打包在一个轻量级的可移植容器中。 1.2 Docker 的主要组件 镜像(Image&a…

Django form.save 方法的详细分析

在 Django 中,form.save() 方法是用于将表单中的数据保存到数据库的核心方法。它的功能和实现可以分为几个重要的部分,下面就是我对 form.save() 方法的详细分析: 1、问题背景 在 Django 中,我们经常会使用 Form 来处理用户提交的…

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次! 完整论文+代码+数据结果链接在文末! 一、第一问 问题描述:假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于 2023 年保持稳定,每季种植的农作物在当季销售。如果某种作物每…

mysql基础知识-锁机制

文章目录 锁类型1. 共享锁(Shared Locks, S锁)2. 排他锁(Exclusive Locks, X锁)3. 意向锁(Intention Locks)4. 记录锁(Record Locks)5. 间隙锁(Gap Locks)6. …

SpringBoot和Mybatis框架怎么防止SQL注入

在 Spring Boot 和 MyBatis 中&#xff0c;防止 SQL 注入的主要方法包括&#xff1a; 1.使用 MyBatis 的动态 SQL MyBatis 提供了安全构建 SQL 查询的方式&#xff0c;推荐使用动态 SQL 标签&#xff08;如 <if>、<choose>、<foreach> 等&#xff09;构建查…

安卓玩机工具-----通用安卓玩机工具 “搞机助手”界面预览 推荐

在网络中有很多很好玩的工具。方便安卓机型联机使用各种功能。系列博文将详细的演示有些工具的特点与使用方法 搞机助手 作者&#xff1a;流水断崖 目前开发功能有&#xff1a;Twrp recovery全自动刷机&#xff0c;免Root冻结、卸载预装软件&#xff0c;免Root激活&#xff…

Azure和Transformers的详细解释

Azure AI 是微软提供的人工智能 (AI) 解决方案的集合&#xff0c;旨在帮助开发人员、数据科学家和企业轻松构建和部署智能应用程序。以下是对 Azure AI 各个方面的详细解释&#xff1a; Azure AI 主要组件 Azure Cognitive Services&#xff08;认知服务&#xff09;&#xff…

音频-语言大模型原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

【Dash】feffery_antd_componenet 中的 AntdSpace

一、feffery_antd_componenet 中的 AntdSpace feffery_antd_components&#xff08;简称fac&#xff09;中的AntdSpace组件是一个基于Ant Design的Dash第三方组件&#xff0c;它用于在水平或垂直方向上放置多个元素&#xff0c;并提供元素之间的间距。以下是AntdSpace组件的一…

鸿蒙开发中实现自定义弹窗 (CustomDialog)

效果图 #思路 创建带有 CustomDialog 修饰的组件 &#xff0c;并且在组件内部定义controller: CustomDialogController 实例化CustomDialogController&#xff0c;加载组件&#xff0c;open()-> 打开对话框 &#xff0c; close() -> 关闭对话框 #定义弹窗 (CustomDial…

Google Maps API申请和集成到React Native应用中的教程

Google Maps API申请和集成到React Native应用中的教程 访问Google Cloud Console 打开浏览器,访问 https://console.cloud.google.com/使用您的Google账号登录 选择或创建项目 在页面顶部的项目下拉菜单中,选择现有项目或创建新项目如果创建新项目,点击"新建项目",…

本地如何快速启动静态服务器

本地快速启动静态服务器 有许多第三方库可以帮助你快速启动一个静态服务器&#xff0c;甚至无需编写代码。通过命令行运行这些库后&#xff0c;它们会自动启动一个服务器并打开指定端口&#xff0c;展示当前目录下的文件内容&#xff1a; 电脑得提前安装NodeJS 1、http-serv…

yum源404导致Could not resolve host: mirrorlist.centos.org

yum源更换错误问题记录 网上查询到的部分源过旧&#xff0c;现在已经不存在404&#xff0c;可以将报错信息中的无法访问的地址在浏览器中尝试。如下http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock这个地址就已经不在。 可以网上搜一下最新…

UI(五)常用布局总结

自适应布局 1.1、线性布局&#xff08;LinearLayout&#xff09; 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列&#xff0c;Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距&#xff0c;达到各子组件…

关于HTTP SESSION

一个浏览器客户端共享一个session&#xff0c;当浏览器请求到服务器时 通过HttpSession session request.getSession(false);来创建session。 HttpSession session request.getSession(false); 当参数为false时&#xff0c;服务器会通过sessionID找&#xff0c;如果当前服务器…

启动与登录Mysql

1.启动与停止MYSQL服务 启动MySQL 服务的命令 以管理员身份打开Windows 的命令行窗口&#xff0c;在命令提示符后输入以下命令启动MySQL 服务&#xff1a; net start[ 服务名称] 也可以直接输入以下命令&#xff1a; net start 按【Enter】键执行该命令&#xff0c;默认启…

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入&#xff08;Embedding&#xff09;方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节&#xff1a;嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以…

C#/.NET/.NET Core推荐学习路线文档文章

前言 专门为C#/.NET/.NET Core推荐学习路线&文档&文章提供的一个Issues&#xff0c;各位小伙伴可以把自己觉得不错的学习路线、文档、文章相关地址分享出来&#x1f91e;。 https://github.com/YSGStudyHards/DotNetGuide/issues/10 &#x1f3f7;️C#/.NET/.NET Cor…