Python文件、文件夹操作汇总
目录
一、概览
二、文件操作
2.1 文件的打开、关闭
2.2 文件级操作
2.3 文件内容的操作
三、文件夹操作
四、常用技巧
五、常见使用场景
5.1 查找指定类型文件
5.2 查找指定名称的文件
5.3 查找指定名称的文件夹
5.4 指定路径查找包含指定内容的文件
一、概览
在工作中经常会遇到对文件,文件夹操作,在文件使用多时,使用python脚本是一种很便捷的方法,也可以实现一些工具如everything,notepad++无法实现的功能,更加灵活。本文将针对相关的基础操作进行介绍以及演示,其他的各种场景也都是基础操作的组合。

注:文章演示例子为window系统下的操作,python版本3.8.3,linux下类似,主要是路径格式和文件权限存在较大差异
二、文件操作
2.1 文件的打开、关闭
import os
#文件的打开、关闭
#方法一 使用open
file=open(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\counter.v",encoding="utf-8") #打开一个存在的文件counter.v,打开的编码格式为UTF-8,读取文件乱码内容大概率就是编码格式设置的不对,文件对象赋值给file
print("content:", file)
file2=open(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\test.v","a") #打开文件test.v,文件如果不存在时会自动创建test.v
file.close() #文件的关闭
#方法二 使用with
with open(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\counter.v") as f: #使用with相比方法一,会在执行完后自动释放资源,不会造成资源占用浪费print("content:",f)
open函数打开文件各选项配置参数含义

2.2 文件级操作
文件级操作主要包括文件的创建,删除,重命名,复制,移动。
import os
import shutil
#文件的创建,使用open打开要创建的文件,使用参数w即可,如指定路径下创建file.txt
with open(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\file.txt",'w'):#文件删除
os.remove(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\file.txt")#重命名,将file.txt重命名为file_rename.txt
os.rename(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\file.txt",r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\file_rename.txt")#复制文件使用shutil库的copy函数,如将file.txt复制一份到上一级目录Verilog_test中,如果目标路径存在同名文件,则将其覆盖
source=r'C:\Users\ZYP_PC\Desktop\verilog_test\counter\file.txt'
dest=r"C:\Users\ZYP_PC\Desktop\verilog_test"
shutil.copy(source,dest) #复制后文件的更新时间为复制的时间
# shutil.copy(source,dest) #可保留复制后文件的原始创建时间等信息 #移动文件使用shutil库的move函数,如将file.txt移动到目录中counter中
source=r'C:\Users\ZYP_PC\Desktop\verilog_test\file.txt'
dest=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
shutil.move(source,dest) #需注意,如果目的路径已存在文件,会移动失败,此时可见对同名文件进行判断
2.3 文件内容的操作
文件内容的常用操作包括读取,查找,增加,删除,修改
import os
import shutil
import re
#文件内容的读取
with open(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\counter.v",'r') as f:all=f.read() #将整个文件内容作为一个字符串读取print(all)#对单行按字符逐个读取,默认第一行for line in f.readline(5): #可设置读取字符数,如示例读取前5各字符print(line)# 逐行读取文件内容for lines in f.readlines(): #读取的结果f.readlines()为整个文件内容按行为单位的listprint(lines)#内容查找
#指定路径查找包含字符module的行
#方法1 使用字符匹配方法in
pattern = 'module'
path=r'C:\Users\ZYP_PC\Desktop\verilog_test\counter'
with open(path, 'r') as file:for line in file:if pattern in line:print(line) #打印查找到位置所在行
#方法2,使用正则匹配
pattern = 'module'
path=r'C:\Users\ZYP_PC\Desktop\verilog_test\counter'
with open(path, 'r') as f:for line in f:if re.search(pattern, line):print(line) #打印查找到位置所在行#内容修改
#方法1,使用字符自带的replace函数
new_str="new" #替换的字符
old_str="old" #原始字符
path = r'C:\Users\ZYP_PC\Desktop\verilog_test\counter\counter.v'
content=""
with open(path, "r", encoding="utf-8") as f:for line in f:if old_str in line:line = line.replace(old_str,new_str)content += line
with open(path,"w",encoding="utf-8") as f: f.write(content) #将修改的内容写入文件中#方法2,使用正则表达中的sub函数
new_str="new" #替换的字符
old_str="old" #原始字符
content=""
path = r'C:\Users\ZYP_PC\Desktop\verilog_test\counter\counter.v'
with open(path, "r", encoding="utf-8") as f:for line in f:if old_str in line:print(line)line=re.sub(old_str,new_str,line) #使用sub函数进行替换content += line
with open(path,"w",encoding="utf-8") as f: #将修改的内容写入文件中f.write(content)#内容删除,与内容修改类似,将新的替换字符修改为“”即可,内容增加类似
三、文件夹操作
文件夹常见操作包括创建,删除,查找,重命名,复制,移动
import shutil
import re
from pathlib import Path
import glob##指定路径下创建文件夹
#方法1
path = r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
folder = "new_folder"
os.mkdir(os.path.join(path, folder)) #如果已存在同名文件则会报错
os.makedirs(os.path.join(path, folder),exist_ok=True) #如果已存在同名文件则跳过
#方法2
path = Path(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter")
folder = "new_folder"
new_folder_path = path / folder
new_folder_path.mkdir()##文件夹删除,删除文件夹counter_bak
path = r"C:\Users\ZYP_PC\Desktop\verilog_test\counter_bak"
shutil.rmtree(path)##文件夹复制,
#方法1,使用shutil库,推荐使用该方法
new_path=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter_new"
old_path=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
if os.path.exists(new_path): #先对新文件夹进行判断是否已存在,已存在的进行复制会报错print("文件夹已存在")
shutil.copytree(old_path,new_path) #counter目录下所有文件复制到counter_new下,如果counter_new不存在,则会先创建##文件夹改名,和文件改名操作相同,将counter文件夹改名为counter_rename
old_name=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
new_name=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter_rename"
os.rename(old_name,new_name)##文件夹移动,将counter文件夹移动到Desktop目录中
old_path=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
new_path=r"C:\Users\ZYP_PC\Desktop"
if os.path.exists(old_path): #先对复制的文件夹进行是否存在进行判断shutil.move(old_path,new_path)
else:print("源文件不存在")
四、常用技巧
下面将一些在文件,文件夹操作中经常需要用到的函数进行介绍,部分在前面的例子中已经涉及。
import os
import shutil
import re
from pathlib import Path
import glob
##返回当前的工作目录
current_path=os.getcwd()
print(current_path)##判断路径是否有效,可为文件夹路径或文件路径
dir_path=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
file_path=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\counter.v"
print(os.path.exists(file_path)) #路径有效则返回true,否则返回false##文件、文件夹的判断
#方法1
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter22"
print(os.path.isfile(path)) #判断给定的path是否是文件,是返回True,不是返回False
print(os.path.isdir(path)) #判断给定的path是否是文件夹,是返回True,不是返回False
#方法2 使用pathlib库中的函数Path
path = Path(r'C:\Users\ZYP_PC\Desktop\verilog_test\counter')
path.is_file() #判断给定的path是否是文件,是返回True,不是返回False
path.is_dir() #判断给定的path是否是文件夹,是返回True,不是返回False
#方法3 使用path的splittext函数,前提需先进行路径有效性判断
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter\counter_v"
if os.path.exists(path):print("path路径有效")file_name, suffix = os.path.splitext(path) # splitext将返回文件名和后缀,如果type不为空说明为文件,为空则为文件夹,前提是path是存在的,否则会误判if suffix:print("这是一个文件")else:print("这是一个文件夹")
else:print("path是一个无效地址")##给定一个目录,返回该目录下所有文件的路径,返回结果为列表
path = Path(r'C:\Users\ZYP_PC\Desktop\verilog_test\counter')
files = glob.glob(os.path.join(path, '*'))
print(files)##路径拼接,将多个路径拼接成一个路径
#方法1,使用字符串带的join函数
path1=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
path2="counter.v"
abs_path=os.path.join(path1,path2)
print(abs_path)
#方法2,使用pathlib的Path函数
path1=Path(r"C:\Users\ZYP_PC\Desktop\verilog_test\counter")
path2="counter.v"
abs_path=path1 / path2
print(abs_path)
#方法3,使用字符串直接连接
path1=r"C:\Users\ZYP_PC\Desktop\verilog_test\counter"
path2="counter.v"
abs_path=path1+'\\'+path2 #中间的\\需根据path1是否包含来决定是否需要
print(abs_path)##文件夹遍历
#方法1 使用os.walk函数
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\project_0307"
for root,dirs,file in os.walk(path): #root为当前目录,dirs为当前目录所有的文件夹列表,file为当前目录的所有文件列表print("root:",root)print("dirs:",dirs)print("file:",file)
#方法2 使用os.listdir函数,和os.walk的区别是不会遍历子目录,要实现递归遍历需要定义函数实现
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\project_0307"
for file in os.listdir(path): #root为当前目录,dirs为当前目录所有的文件夹列表,file为当前目录的所有文件列表abs_path=os.path.join(path,file)print("abs_path:",abs_path)
#方法3 使用glob.glob函数,也不会遍历子目录,要实现递归遍历需要定义函数实现
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\project_0307"
files=glob.glob(os.path.join(path,"*")) #获取当前目录下所有的文件和文件夹
print("files:",files)
五、常见使用场景
5.1 查找指定类型文件
指定目录下查询所有的txt文件,返回查找到的文件路径,以列表形式保存
import os# 查询指定目录下指定类型的文件,返回查找到结果的绝对路径
def find_type(path,type):file_find=[]for root,dirs,files in os.walk(path): #获取指定目录下的所有文件for file in files:if file.endswith(".txt"):file_find.append(os.path.join(root, file))print("files:",file_find)
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\project_0307"
suffix=".txt"
find_type(path,suffix) #以查找目录project_0307下的所有txt文件为例
查询结果

5.2 查找指定名称的文件
和5.1的类似,主要是if后的判断条件进行修改,如在project_0307目录下查找counter_tb.v文件
def find_file(path,f_name):file_find=[]for root,dirs,files in os.walk(path): #获取指定目录下的所有文件for file in files:if file==f_name: #判断条件进行替换,替换为文件名称查找file_find.append(os.path.join(root, file))print("files:",file_find)
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\project_0307"
file="counter_tb.v"
find_file(path,file) #以查找目录project_0307下的counter_tb.v文件为例
查询结果

5.3 查找指定名称的文件夹
以在目录project_0307下查找所有名称为sim_1的文件夹为例
# 查询指定目录下指定名称的文件夹,返回查找到结果的绝对路径
def find_dir(path,dir_name):folder_find=[]for root,dirs,files in os.walk(path): #获取指定目录下的所有文件,文件夹for dir in dirs:if dir==dir_name:folder_find.append(os.path.join(root, dir))print("find_result:",folder_find)
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\project_0307"
dir_name="sim_1"
find_dir(path,dir_name) #以查找目录project_0307下所有名称为sim_1的文件夹为例
查找结果

5.4 指定路径查找包含指定内容的文件
以在目录project_0307下查找包含字符FPGA的log文件
def find_file(path,suffix,content):file_find=[]for root,dirs,files in os.walk(path): #获取指定目录下的所有文件for file in files:if file.endswith(suffix): #判断条件进行替换,替换为文件名称查找abs_path=os.path.join(root, file)with open(abs_path,"r") as f:for line in f:if content in line:file_find.append(abs_path)print("files:",file_find)
path=r"C:\Users\ZYP_PC\Desktop\verilog_test\project_0307" #查找目录
suffix=".log" #查找的文件类型为log类型
content="FPGA" #文件中包含字符FPGA
find_file(path,suffix,content) #以查找目录project_0307下的counter_tb.v文件为例
查找结果

相关文章:
Python文件、文件夹操作汇总
目录 一、概览 二、文件操作 2.1 文件的打开、关闭 2.2 文件级操作 2.3 文件内容的操作 三、文件夹操作 四、常用技巧 五、常见使用场景 5.1 查找指定类型文件 5.2 查找指定名称的文件 5.3 查找指定名称的文件夹 5.4 指定路径查找包含指定内容的文件 一、概览 在…...
CHM Viewer Star 6.3.2(CHM文件阅读)
CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…...
【GIT】git分支命令,使用分支场景介绍git标签介绍,git标签命令,git标签使用的场景git查看提交历史
目录 一,git分支命令,使用分支场景介绍 二,git标签介绍,git标签命令,git标签使用的场景 三,git查看提交历史 前言: 今天我们来聊聊关于Git 分支管理。几乎每一种版本控制系统都以某种形式支持…...
Zeitgeist ZTG Token以及其预测市场加入Moonbeam生态
波卡上的首选多链开发平台Moonbeam宣布与Zeitgeist达成XCM集成,将ZTG Token引入Moonbeam。此集成将使波卡内的Moonbeam和Zeitgeist网络之间的流动性得以流动,并通过Moonbeam的互连合约实现远程链集成。 Zeitgeist是一个基于波卡的Substrate区块链框架构…...
AM@方向导数概念和定理
文章目录 abstract方向导数二元函数方向导数偏导数是方向导数的特例偏导数存在一定有对应的方向导数存在方向导数存在不一定有偏导数存在例 三元函数方向导数例 方向导数存在定理和计算公式证明二元函数三元函数 abstract 方向导数的概念,定理和计算公式方向导数是对偏导的补充…...
微信小程序隐私政策不合规,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意
小程序隐私政策不合规,默认自动同意《用户服务协议》及《隐私政策》,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意,请整改后再重新提交。 把 登录代表同意《用户协议》和《隐私政策》 改为 同意《用…...
Python中如何判断两个对象的内存地址是否一致?
目录 一、引言 二、Python的内存管理 三、对象的比较 四、使用id函数判断内存地址 五、总结 一、引言 在Python中,我们经常需要比较两个对象是否是同一个对象,或者说它们是否在内存中占据同一位置。在理解这个问题之前,我们需要了解Pyt…...
唯美仙侠3D手游2023【仙变3】画面精美/linux服务端+双端+GM后台+运营后台+详细教程
搭建资源下载地址:https://www.ldmzy.com/6618/6618.html...
React组件通信:如何优雅地实现组件间的数据传递
在React应用中,组件通信是至关重要的一部分。通过合适的数据传递和交互方式,我们可以构建出更加灵活和高效的前端应用。本文将介绍React组件通信的各种方式,并提供代码实现,帮助你更好地理解和应用这些技术。 1. 使用props进行父子…...
数据分析实战 | 逻辑回归——病例自动诊断分析
目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接:https://download.csdn.net/d…...
Eigen::Matrix<double,3,1> F;Eigen::MatrixXd F (3, 2);这两行代码有什么区别?
这两行代码的区别在于定义的矩阵 F 的类型和维度不同。 第一行: Eigen::Matrix<double,3,1> F;这行代码创建了一个3x1的矩阵 F,其中元素类型为 double。这是一个静态大小的矩阵,其维度在编译时确定。 第二行: Eigen::Ma…...
Java Agent - 应用程序代理-笔记
Java Agent - 应用程序代理-笔记 概述说明 Java Agent 又叫做 Java 探针,该功能是 Java 虚拟机提供的一整套后门,通过这套后门可以对虚拟机方方面面进行监控与分析,甚至干预虚拟机的运行。 是在 JDK1.5 引入的一种可以动态修改 Java 字节码…...
gird 卡片布局
场景一:单元格大小相等 这承载了所有 CSS Grid 中最著名的片段,也是有史以来最伟大的 CSS 技巧之一: 等宽网格响应式卡片实现 .section-content {display: grid;grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));gap: 10px; …...
C#医学检验室(LIS)信息管理系统源码
LIS:实验室信息管理系统 (Laboratory Information Management System简称:LIS)。 LIS 是面向医院检验科、检验中心、动物实验所、生物医疗研究所等科研单位研发的集数据采集、传输、存储、分析、处理、发布等功能于一体的信息管理系统。 一、完善的质控: 从样本管理…...
建行广东江门分行:科技赋能,数据助力纠“四风”
为进一步深化落实中央八项规定精神,持续加大“四风”问题查处力度,建行驻江门市分行纪检组根据《广东省分行贯彻落实中央八项规定精神持之以恒纠治“四风”实施方案》(建粤党发〔2023〕1号)安排,对驻在市分行开展“四风…...
3164:练27.1 叮叮当当 《信息学奥赛一本通编程启蒙(C++版)》
3164:练27.1 叮叮当当 《信息学奥赛一本通编程启蒙(C版)》 【题目描述】 松鼠老师和尼克玩报数游戏。松鼠老师数到2的倍数时,尼克就说“叮叮”;松鼠老师数到3的倍数时,尼克就说“当当”;松鼠老…...
立体库堆垛机放货动作控制程序功能
放货动作程序功能块 DB11.DBX0.0 为左出货台有货 DB11.DBX1.0 为右出货台有货 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2...
MySQL数据库干货_22——MySQL的用户管理
MySQL的用户管理 MySQL 是一个多用户的数据库系统,按权限,用户可以分为两种: root 用户,超级管理员,和由 root 用户创建的普通用户。 用户管理 创建用户 CREATE USER username IDENTIFIED BY password;查看用户 S…...
基于ubuntu 22, jdk 8x64搭建图数据库环境 hugegraph--google镜像chatgpt
基于ubuntu 22, jdk 8x64搭建图数据库环境 hugegraph download 环境 uname -a #Linux whiltez 5.15.0-46-generic #49-Ubuntu SMP Thu Aug 4 18:03:25 UTC 2022 x86_64 x86_64 x86_64 GNU/Linuxwhich javac #/adoptopen-jdk8u332-b09/bin/javac which java #/adoptopen-jdk8u33…...
4. 深度学习——优化函数
机器学习面试题汇总与解析——优化函数 本章讲解知识点 什么是优化函数?为什么要使用优化函数?详细讲解优化函数优化函数总结梯度下降算法的 batch size 总结本专栏适合于Python已经入门的学生或人士,有一定的编程基础。本专栏适合于算法工程师、机器学习、图像处理求职的学…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
