【Python】基本语法:文件、路径操作

发布时间:2026/9/12 14:25:52

【Python】基本语法:文件、路径操作 1、路径操作1.1 旧版 os.path1.1.1 路径拼接 os.path.join将多个字符串拼接成一个路径原型os.path.join(path, *paths):示例importos pos.path.join(laoer,logs,laoer.log)print(p)windows下输出laoer\logs\laoer.loglinux下输出laoer/logs/laoer.log1.1.2 路径拆分 os.path.split将路径拆分成目录和文件名原型os.path.split(path)返回元组 (dir, filename)tuple (head, tail)示例-Windowstestos.path.split(laoer\\logs\\laoer.log)print(test)(laoer\\logs,laoer.log)示例-Linuxtestos.path.split(laoer/logs/laoer.log)print(test)(laoer/logs,laoer.log)1.1.3 其它常用操作1获取目录os.path.dirname(path)2获取文件名os.path.basename(path)3拆分文件名和后缀os.path.splitext(path)4转为绝对路径os.path.abspath(path)5规范化路径消除 ./ …/、多余分隔符os.path.normpath(path)6返回真实物理路径解析软链接os.path.realpath(path)7文本路径是否存在os.path.exists(path)8是否是普通文件存在且不是文件夹os.path.isfile(path)9是否是文件夹os.path.isdir(path)10是否是软链接os.path.islink(path)11获取文件大小os.path.getsize(path)12获取最后访问时间os.path.getatime(path)13最后修改时间os.path.getmtime(path)14获取创建时间os.path.getctime(path)15是否是绝对路径os.path.isabs(path)1.4 新版 pathlibpathlib 是 Python3.4 内置面向对象路径处理Path 对象支持 / 运算符拼接路径天然跨平台from pathlib import Path老旧接口对比功能os.pathpathlib Path路径拼接os.path.join(a,b,c)Path(a)/b/c获取目录os.path.dirname(path)Path(path).parent获取文件名os.path.basename(path)Path(path).name获取文件名-不带后缀os.path.splitext(path)[0]Path(path).stem获取后缀os.path.splitext(path)[1]Path(path).suffix获取绝对路径os.path.abspath(path)Path(path).absolute()规范化路径os.path.normpath(path)Path(path).resolve(strictFalse)获取真实路径os.path.realpath(path)Path(path).resolve()文件是否存在os.path.exists(path)Path(path).exists()是文件吗os.path.isfile(path)Path(path).is_file()是文件夹吗os.path.isdir(path)Path(path).is_dir()是软连接吗os.path.islink(path)Path(path).is_symlink()是绝对路径吗os.path.isabs(path)Path(path).is_absolute()获取文件大小os.path.getsize(path)Path(path).stat().st_size获取修改时间os.path.getmtime(path)Path(path).stat().st_mtime文件一样吗os.path.samefile(p1,p2)Path(p1).samefile(p2)完整示例frompathlibimportPathimporttime# 1. 路径拼接 # os.path.join(/data, logs, app.log)pPath(/data)/logs/app.logprint(路径拼接:,p)输出路径拼接:\data\logs\app.log# 2. 拆分目录 文件 file_pPath(/tmp/demo.txt)# os.path.dirnameprint(父目录:,file_p.parent)输出父目录:\tmp# os.path.basenameprint(文件名:,file_p.name)输出文件名:demo.txt# os.path.splitext 拆分名称和后缀print(文件名不带后缀:,file_p.stem)输出文件名不带后缀:demoprint(文件后缀:,file_p.suffix)输出文件后缀:.txt# 多后缀 .tar.gz 场景p2Path(data.tar.gz)print(stem(只剥最后一层后缀):,p2.stem)输出stem(只剥最后一层后缀):data.tarprint(suffix:,p2.suffix)输出suffix:.gz# 想要一次性拿到全部后缀可以用 suffixesprint(所有后缀列表:,p2.suffixes)输出所有后缀列表:[.tar,.gz]# 3. 绝对路径 / 规范化 / 真实路径 rel_pPath(./test.py)# os.path.abspathabs_prel_p.absolute()print(绝对路径:,abs_p)输出绝对路径:D:\bin\python3.12.10\test.py# os.path.normpath 等价resolve(strictFalse) 不校验文件是否存在norm_pPath(/a//b/../c).resolve(strictFalse)print(规范化路径:,norm_p)输出规范化路径:D:\a\c# os.path.realpath 解析软链接strictTrue 要求文件存在real_prel_p.resolve()print(真实物理路径(解析软链):,real_p)输出真实物理路径(解析软链):D:\bin\python3.12.10\test.py# 4. 存在性 类型判断 test_pathPath(/tmp/demo.txt)# os.path.existsprint(是否存在:,test_path.exists())# os.path.isfileprint(是否普通文件:,test_path.is_file())# os.path.isdirprint(是否文件夹:,test_path.is_dir())# os.path.islinkprint(是否软链接:,test_path.is_symlink())# os.path.isabs 判断绝对路径print(是否绝对路径:,test_path.is_absolute())# 5. 文件大小、时间信息 iftest_path.exists():# os.path.getsizesizetest_path.stat().st_sizeprint(文件大小(bytes):,size)# os.path.getatime / getmtime / getctimestat_infotest_path.stat()atimestat_info.st_atime# 访问时间mtimestat_info.st_mtime# 修改时间常用ctimestat_info.st_ctime# 属性变更时间print(修改时间:,time.ctime(mtime))# 6. samefile 对比两个路径是否同一文件 p_aPath(/tmp/demo.txt)p_bPath(/tmp/./demo.txt)ifp_a.exists()andp_b.exists():print(是否同一个文件:,p_a.samefile(p_b))# 常用组合示例对应之前os.path案例 file_pathPath(/root/code/demo.py)dir_pathfile_path.parent filenamefile_path.name stemfile_path.stem suffixfile_path.suffix new_pathdir_path/f{stem}_bak{suffix}print(新备份路径:,new_path)输出新备份路径:\root\code\demo_bak.py# 创建文件夹pathlib自带无需osifnotdir_path.exists():dir_path.mkdir(parentsTrue,exist_okTrue)# parentsTrue自动创建多级父目录# exist_okTrue目录已存在不会抛异常2、文件操作2.1 打开 open文件打开时moder读w写a追加r读写w 读写打开时直接清空原有内容文件不存在则新建a 可读可追加写入新内容永远写在末尾文件不存在则新建rb wb ab二进制读写fopen(a.txt,moder,encodingutf-8)f.close()推荐 with 自动关闭withopen(a.txt,r,encodingutf-8)asf:dataf.read()2.2 读写、刷新f.read(n)读取 n 个字符f.readline()读取一行f.readlines()读取所有行返回列表f.write(“文本”)写入字符串返回写入长度f.writelines(列表)批量写入多行不会自动加换行f.flush()强制刷缓存到磁盘f.seek(offset)移动文件指针f.tell()获取当前指针位置2.3 创建、删除、重命名os.mkdir(“dir”) 创建单层文件夹os.makedirs(“a/b/c”) 创建多级目录os.rmdir(“dir”) 删除空文件夹os.removedirs(“a/b/c”) 递归删空目录os.remove(“file.txt”) 删除文件os.rename(“old.txt”, “new.txt”) 重命名 / 移动文件os.listdir(path) 列出目录下所有名称字符串2.4 复制、移动shutil 模块中实现的复制、移动、递归删除shutil.copy(src, dst) 复制文件保留权限不复制元数据shutil.copy2(src, dst) 复制文件 保留文件修改时间等元数据shutil.copyfile(src, dst) 仅复制文件内容最简目标必须是文件路径shutil.copytree(src_dir, dst_dir) 递归复制整个文件夹shutil.move(src, dst) 文件 / 文件夹移动、重命名跨分区可靠shutil.rmtree(path) 强制删除非空文件夹高危3、pathlib操作文件3.1 创建文件、文件夹1导入from pathlib import Path2定义p Path(demo.txt)3创建空文件存在也不报错p.touch(exist_okTrue)4创建文件夹Path(data).mkdir(exist_okTrue)5创建多级文件夹Path(a/b/c).mkdir(parentsTrue, exist_okTrue)3.2 一次性读写内部执行open打开、读写、close关闭1读取文本text p.read_text(encodingutf-8)2覆盖写入文本p.write_text(hello world, encodingutf-8)3二进制读写data p.read_bytes() p.write_bytes(bbinary content)3.3 多次读写with open1r 只读with p.open(r, encodingutf-8) as f: f.read()2w 覆盖写with p.open(w, encodingutf-8) as f: f.write(xxx)3a 追加with p.open(a, encodingutf-8) as f: f.write(\nnew line)4r 读写不清空文件with p.open(r, encodingutf-8) as f: f.read() f.write(modify)5二进制读写 rb / wb / abwith p.open(rb) as f: raw f.read()6逐行读写with p.open(r, encodingutf-8) as f: for line in f: print(line.strip())7其它操作和内置open相似readline()readlines()write()writelines()seek()tell()flush()
延伸阅读

更多相关文章

2026/9/11 22:21:08

muke网-2026年程序员AI编程绿皮书

下载课:weiranit.fun/18174/ AI 编程实战绿皮书|程序员用好 AI 工具的完整指南 序幕:工具已就位,差距在认知 2026年,几乎没有程序员还未接触过AI编程工具。从ChatGPT到Cursor,从Copilot到Claude&#xff0c…

2026/9/12 11:18:12

AI智能体(Agent)开发实战:工业级项目案例驱动课

下载课:weiranit.fun/18125/ AI 智能体开发实战:工业级项目案例驱动,掌握可商用的工程落地能力 别再沉迷于给聊天机器人换皮肤、改语气了。AI 智能体真正的战场,不在 Demo 展示厅,而在炼化产线的控制室里、工厂的拆单排…

2026/9/12 14:25:42

零代码平台加速全栈开发:数据库、运维与AI集成实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 14:25:42

移动端GPU带宽优化:纹理压缩与后处理降载实战

上周优化一个植物园场景的Demo,真机跑了两分钟机身就开始烫手。截帧一看,顶点数不算夸张,DrawCall也压得住,GPU频率却稳稳顶在最高档。真正把我的带宽预算掏空的,是纹理采样和后处理这两个环节。我习惯把这两个家伙称为…

2026/9/12 14:25:42

MOSFET栅极驱动电阻与寄生电感的LTspice仿真分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 14:25:42

船舶航向自适应控制:切线型障碍Lyapunov函数与协同制导

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 14:25:42

AI Agent拆解招聘JD:将岗位需求转化为可验证行为指令

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 14:20:42

CVPR 2026微妙视觉计算:挑战、技术与工业应用全解析

1. 项目概述与核心价值最近在CVPR 2026的官网上看到了一个让我眼前一亮的Call for Papers,是第二届“Subtle Visual Computing”国际研讨会与挑战赛。作为一个在计算机视觉领域摸爬滚打了十来年的老手,我第一反应是:这个方向终于被系统地提上…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码