目录:
基础概念 主要函数介绍 实际应用案例 os.path
模块方法
在Python中,处理文件路径是一项常见的任务,无论是读取文件、写入数据还是管理文件夹结构。os.path
模块提供了大量函数来帮助我们处理文件路径,使得这些操作变得更加简单和高效。
基础概念
在深入具体函数之前,让我们先了解一下文件路径的基础知识。文件路径可以分为两种类型:绝对路径和相对路径。
绝对路径:从根目录开始到目标文件的完整路径。例如,在Windows系统中, C:\Users\ExampleUser\Documents\example.txt
。相对路径:相对于当前工作目录的路径。例如,如果你当前位于 C:\Users\ExampleUser\Documents
目录下,那么example.txt
就是一个相对路径。
主要函数介绍
接下来,我们将逐一介绍os.path
模块中的一些重要函数,并通过实例代码来演示它们的使用方法。
1、获取绝对路径 - os.path.abspath(path)
import os
# 获取当前工作目录
current_dir = os.getcwd()
print("当前工作目录:", current_dir)
# 获取文件的绝对路径
relative_path = 'test.txt'
absolute_path = os.path.abspath(relative_path)
print(f"文件 {relative_path} 的绝对路径: {absolute_path}")
2、获取文件名 - os.path.basename(path)
import os
path = '/home/user/documents/report.pdf'
filename = os.path.basename(path)
print(f"文件名: {filename}") # 输出: report.pdf
3、获取目录名 - os.path.dirname(path)
import os
path = '/home/user/documents/report.pdf'
directory = os.path.dirname(path)
print(f"目录名: {directory}") # 输出: /home/user/documents
4、检查文件或目录是否存在 - os.path.exists(path)
和 os.path.isfile(path)
, os.path.isdir(path)
import os
file_path = 'D:/shanhai/test.txt'
directory_path = 'D:/shanhai/directory'
if os.path.exists(file_path):
if os.path.isfile(file_path):
print(f"{file_path} 是一个存在的文件")
elif os.path.isdir(file_path):
print(f"{file_path} 是一个存在的目录")
else:
print(f"{file_path} 不存在")
if os.path.exists(directory_path):
if os.path.isdir(directory_path):
print(f"{directory_path} 是一个存在的目录")
else:
print(f"{directory_path} 不存在")
5、获取文件大小 - os.path.getsize(path)
import os
file_path = 'D:/shanhai/test.txt'
file_size = os.path.getsize(file_path)
print(f"文件大小: {file_size} 字节")
6、拼接路径 - os.path.join(path1, path2, ...)
import os
dir1 = 'D:/shanhai'
dir2 = 'dir2'
file_name = 'report.pdf'
full_path = os.path.join(dir1, dir2, file_name)
print(f"拼接后的完整路径: {full_path}")
7、分割路径 - os.path.split(path)
和 os.path.splitext(path)
import os
full_path = 'D:\shanhai\main.py'
# 分割路径
path_parts = os.path.split(full_path)
print(f"路径分割结果: {path_parts}") # 输出: ('D:\\shanhai', 'main.py')
# 分割文件名和扩展名
file_parts = os.path.splitext(os.path.basename(full_path))
print(f"文件名和扩展名分割结果: {file_parts}") # 输出: ('main', '.py')
实际应用案例
假设你正在开发一个文档管理系统,需要定期检查某个文件夹内的文件状态并记录下来。你可以使用os.path
模块来实现这一需求。
import os
def check_files(directory):
"""
检查指定目录下的所有文件,并打印文件的详细信息。
"""
if not os.path.isdir(directory):
print(f"{directory} 不是一个有效的目录")
return
for root, dirs, files in os.walk(directory):
for name in files:
file_path = os.path.join(root, name)
if os.path.isfile(file_path):
size = os.path.getsize(file_path)
modified_time = os.path.getmtime(file_path)
print(f"文件: {name}, 大小: {size} 字节, 最后修改时间: {modified_time}")
# 使用示例
directory_to_check = 'D:/shanhai'
check_files(directory_to_check)
以上代码中,我们首先检查给定路径是否为有效目录,然后遍历该目录及其子目录下的所有文件,对于每一个文件,获取其大小和最后修改时间,并打印出来。这在文件管理和备份系统中非常有用,可以帮助快速定位需要关注的文件。
os.path
模块方法
下面是 os.path
模块常用的方法及其说明。
方法 | 说明 |
---|---|
os.path.abspath(path) | 返回 path 的绝对路径。 |
os.path.basename(path) | 获取 path 路径的基本名称,即 path 末尾到最后一个斜杠的位置之间的字符串。 |
os.path.commonprefix(list) | 返回 list (多个路径)中,所有 path 共有的最长的路径。 |
os.path.dirname(path) | 返回 path 路径中的目录部分。 |
os.path.exists(path) | 判断 path 对应的文件是否存在,如果存在,返回 True ;反之,返回 False 。 |
os.path.lexists(path) | 判断路径是否存在,如果存在,则返回 True ;反之,返回 False 。与 exists() 的区别在于,lexists() 会识别无效的符号链接。 |
os.path.expanduser(path) | 把 path 中包含的 ~ 和 ~user 转换成用户目录。 |
os.path.expandvars(path) | 根据环境变量的值替换 path 中包含的 $name 和 ${name} 。 |
os.path.getatime(path) | 返回 path 所指文件的最近访问时间(浮点型秒数)。 |
os.path.getmtime(path) | 返回文件的最近修改时间(单位为秒)。 |
os.path.getctime(path) | 返回文件的创建时间(单位为秒,自 1970 年 1 月 1 日起,又称 Unix 时间)。 |
os.path.getsize(path) | 返回文件大小,如果文件不存在就返回错误。 |
os.path.isabs(path) | 判断是否为绝对路径。 |
os.path.isfile(path) | 判断路径是否为文件。 |
os.path.isdir(path) | 判断路径是否为目录。 |
os.path.islink(path) | 判断路径是否为链接文件(类似 Windows 系统中的快捷方式)。 |
os.path.ismount(path) | 判断路径是否为挂载点。 |
os.path.join(path1[, path2[, ...]]) | 把目录和文件名合成一个路径。 |
os.path.normcase(path) | 转换 path 的大小写和斜杠。 |
os.path.normpath(path) | 规范 path 字符串形式。 |
os.path.realpath(path) | 返回 path 的真实路径。 |
os.path.relpath(path[, start]) | 从 start 开始计算相对路径。 |
os.path.samefile(path1, path2) | 判断目录或文件是否相同。 |
os.path.sameopenfile(fp1, fp2) | 判断 fp1 和 fp2 是否指向同一文件。 |
os.path.samestat(stat1, stat2) | 判断 stat1 和 stat2 是否指向同一个文件。 |
os.path.split(path) | 把路径分割成 dirname 和 basename ,返回一个元组。 |
os.path.splitdrive(path) | 一般用在 Windows 下,返回驱动器名和路径组成的元组。 |
os.path.splitext(path) | 分割路径,返回路径名和文件扩展名的元组。 |
os.path.splitunc(path) | 把路径分割为加载点与文件。 |
os.path.walk(path, visit, arg) | 遍历 path ,进入每个目录都调用 visit 函数,visit 函数必须有 3 个参数 (arg, dirname, names) ,dirname 表示当前目录的目录名,names 代表当前目录下的所有文件名,args 则为 walk 的第三个参数。 |
os.path.supports_unicode_filenames | 设置是否可以将任意 Unicode 字符串用作文件名。 |