Python文件与目录操作实战指南:从基础到高级处理
本文系统总结Python中文件与目录的常用操作,涵盖路径判断、目录创建删除、递归与os.walk遍历、文件后缀提取及路径拼接。重点解析文件打开模式、with语句的安全用法,以及通过临时文件策略安全修改文件内容的实战技巧,帮助开发者高效处理日常IO任务。
前言
文件和目录操作是日常开发中的高频需求。本文对此进行简要梳理,涵盖关键注意事项及对应的实现代码,旨在满足基本日常开发场景的需要。
目录操作基础
目录操作
判断目录或是文件是否存在
os.path.exists(path)
判断是否是文件或是目录
# 如果文件或是目录不存在也会返回False
os.path.isfile(path)
os.path.isdir(path)
创建/删除目录
os.mkdir(path)
os.rmdir(path)
得到当前的目录名称
os.path.split(dir_path)[1]
该方法既简单又实用。例如,当我们输入一个具体的目录路径时:
os.path.split('/usr/projects/project1')[1]
# 输出
project1
# 实际上,上面的代码是分了2步走:
# 第1步:利用os.path.split方法分割路径
os.path.split('/usr/projects/project1')
# 输出
('/usr/projects', 'project1')
# 然后第2步取出第2个结果,也就是当前的目录名字
目录遍历方法
循环遍历目录
遍历目录主要有两种实现方式。第一种是常规的递归方法,代码结构如下:
def list_file(path):
for file in os.listdir(path):
if os.path.isdir(os.path.join(path, file)):
list_file(os.path.join(path, file))
print(file)
另一种更为推荐的方式是使用os.walk方法,示例如下:
def list_file_by_walk(dir_path):
for home, dirs, files in os.walk(dir_path):
print(home)
print(dirs)
# files中是文件列表
for file_name in files:
print(file_name)
对os.walk方法的几个关键参数进行简要说明:
- home:代表当前正在遍历的目录路径,例如 /usr/projects/。
- dirs:表示该目录(home)下包含的所有子文件夹(即子目录)。
- files:表示该目录(home)下包含的所有文件列表。
由此可见,os.walk方法会逐层遍历初始目录下的所有子目录及文件。
文件路径与后缀处理
常见的文件操作
与获取目录名类似的操作是获取文件的后缀名。
os.path.splitext(file_path)
当输入参数为文件完整路径时,例如:
a = '/usr/projects/project1/test.txt'
os.path.splitext(a)
# 输出
('/usr/projects/project1/test', '.txt')
# 所以跟上面类似,我们可以直接拿到文件的后缀
os.path.splitext(a)[1]
文件的全路径
# 需要文件的目录路径和文件名
os.path.join(dir_name, file_name)
此方法非常实用,因为在打开文件前,我们通常需要明确文件的具体路径。
例如,在上述遍历目录的代码示例中,我们可以通过以下方式打开并编辑文件:
def list_file_by_walk(dir_path):
for home, dirs, files in os.walk(dir_path):
print(home)
print(dirs)
# files中是文件列表
for file_name in files:
# 这个file_name只是一个文件名
print(file_name)
# 如果我们需要打开文件进行编辑读写操作,那就需要文件的路径
# 用os.path.join方法就可以快速得到文件路径
file_path = os.path.join(home, file_name)
需要注意的是,应避免直接使用字符串相加的方式拼接路径,因为这可能导致兼容性问题,例如在Windows系统上可能产生错误的路径格式。
文件读写与安全模式
读写文件
打开文件
with open(file, 'r') as f:
for line in f.readlines():
print line
只需记住上述打开文件的标准格式,即以下代码:
with open(file_path, 打开的模式) as f
# 我们就拿到了文件对象f,可以对文件进行操作了,比如读写等
这是因为文件读写属于IO操作,必须及时关闭已打开的文件。使用with open() as f的方式可以自动确保文件被关闭,避免手动关闭时可能出现的遗漏。
文件的打开模式
文件支持多种打开模式,包括只读、只写、追加等,具体模式可参考下图:
文件读写模式--来源于网络
虽然模式众多,但掌握常见几种即可,其余模式可在实际使用时再行查阅。需注意以下几点:
创建新文件,只需执行打开文件的操作即可:
# 只要这样一句就创建了一个新文件,也就是打开以后关闭文件
with open(new_file, 'w') as f:
特别需要注意的是,以'w'(只写)模式打开文件会清空原文件的所有内容!因此,如果在遍历文件时希望同时修改文件内容,不能简单地使用'w'模式打开。
那么,在遍历文件时如何同时修改文件呢?这里特指对文件内容的修改,例如修改特定行。
文件内容的安全修改策略
修改文件的某一部分
以下举例说明在遍历文件时如何修改文件,参考上述遍历目录文件的例子:
def list_file_by_walk(dir_path):
for home, dirs, files in os.walk(dir_path):
print(home)
print(dirs)
# files中是文件列表
for file_name in files:
# 这个file_name只是一个文件名
print(file_name)
# 如果我们需要打开文件进行编辑读写操作,那就需要文件的路径
# 用os.path.join方法就可以快速得到文件路径
file_path = os.path.join(home, file_name)
# 这个时候我想修改这个文件的内容,要怎么做呢?
需要注意的是,直接读写模式需要手动管理文件指针,操作较为繁琐;而写读模式会清除原有内容,因此这两种方式均不适合直接修改文件。
一种解决思路是:先以只读模式打开文件,遍历内容并将其保存,例如:
with open(file, 'r') as f:
for line in f.readlines():
print line
# 这里就可以把文件的内容一行行保存起来
# 找到需要修改的行,修改以后保存
保存内容后,再以只读模式打开文件进行写入操作。
另一种思路是:在打开原文件的同时,再打开一个临时文件用于写入,代码如下:
with open(file, 'r') as f, open(cache_file_path, 'w') as w:
for line in f.readlines():
# 中间可以对f文件中的内容进行过滤或是修改
w.write(line)
# 完了以后需要删除原文件,然后把临时文件的名字修改成原来文件的名字即可
此处顺带引出删除和重命名文件的方法。
os.remove(file)
os.rename(cache_file_path, file)
总结
以上总结了Python文件和目录操作的常用知识点与方法,建议收藏以便日后随时查阅。
以上就是本文的全部内容,希望这些内容能对您的学习或工作提供参考价值。感谢大家对本站的支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













