自学内容网 自学内容网

15. Python中的os.path模块/路径操作相关

这个专栏记录我学习/科研过程中遇到的一些小问题以及解决方案,一些问题可能比较蠢请见谅。自用,仅供参考。


------------------------------------------------------------------------------------

Python中的os.path模块详解(包括一些常用的路径操作相关操作)


文章目录

os.path是Python标准库中用于处理和操作文件路径的模块。它提供了一个平台无关的接口,用于常见的文件和目录路径操作,如路径拼接、查询文件类型、获取文件信息等。os.path模块可以在不同操作系统(如 Windows、Linux、macOS)上兼容与文件路径操作相关的代码,各个操作系统上的差异非常小(例如路径分隔符的不同等)。

以下是os.path一些常用函数的总结,包括使用场景与案例(注意,所有的案例均在Linux操作系统上)。除此之外,一些与路径操作相关的函数(例如os.walk等)也同样纳入总结:

1. 路径拼接与分割


☆1.1 os.path.join(*paths):路径拼接

功能:将多个路径组件合成一个路径。

import os
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path)  # 输出 'folder/subfolder/file.txt'

☆1.2 os.path.split(path):路径分割

功能:将路径分割成目录部分和文件名部分(注意,并不是将路径按“/”进行分割!)。

head, tail = os.path.split('/folder/subfolder/file.txt')
print("目录:", head)  # 输出 '/folder/subfolder'
print("文件名:", tail)  # 输出 'file.txt'

☆1.3 os.path.splitext(path):路径与扩展名分割

功能:分割文件路径为根路径和扩展名。

root, ext = os.path.splitext('file.txt')
print("文件名:", root)  # 输出 'file'
print("扩展名:", ext)  # 输出 '.txt'

☆1.4 path.strip(‘/’).split(‘/’):以"/"分割路径

功能:以“/”来分割路径,比如将’/folder/subfolder/file.txt’分割为[‘folder’、‘subfolder’、‘file.txt’]。

import os
path = "/data1/abc/123/assets/"
parts = path.strip('/').split('/')
print(parts)  # 输出['data1', 'abc', '123', 'assets']

注意,strip(‘/’)用于去除路径首尾的 /,因为 split() 方法按每个 / 进行分割,而如果路径以 / 开头,分割出来的第一个元素会是空字符串。所以通过 strip(‘/’) 去除前后的 / 以避免这种情况。另外,split() 方法的输出为列表


2. 路径信息获取


☆2.1 os.path.exists(path):检查路径是否存在

功能:检查路径是否存在,返回 True 或 False。

import os
if os.path.exists('file.txt'):
    print("文件存在")
else:
    print("文件不存在")

2.2 os.path.getsize(path):获取文件/目录大小

功能:返回文件或目录的大小(以字节为单位)。

import os
size = os.path.getsize('/data1/dyz/ffmpeg/')
print(f"文件大小: {size} 字节")  # 输出:文件大小: 4096 字节

2.3 os.path.isfile(path):检查是否为文件

功能:检查给定路径是否是文件(而不是一个目录),返回 True 或 False。

import os
if os.path.isfile('file.txt'):
    print("这是一个文件")

2.4 os.path.isdir(path):检查是否为目录

功能:检查给定路径是否是目录(而不是一个文件),返回 True 或 False。

import os
if os.path.isdir('folder'):
    print("这是一个目录")

☆2.5 os.getcwd():获取当前工作目录

功能:获取当前工作目录(即正在执行脚本的目录)。

import os
current_directory = os.getcwd()
print("当前工作目录:", current_directory)

☆2.6 str.endswith(A) / str.startswith(B):字符串是否以A结尾 / B开头

功能:检查字符串是否以某个字符串结尾或开头,在筛选文件时尤其有用。 例如下面给出了一个案例,统计某一路径下的所有文件,找出以 “.pt” 结尾的文件和以 “test” 开头的文件。

import os
current_directory = os.getcwd()
print("当前工作目录:", current_directory)

在这里插入图片描述


3. 路径信息提取


3.1 os.path.abspath(path):提取路径的绝对路径

功能:提取某一路径的绝对路径,或将相对路径转换为绝对路径。

import os
abs_path = os.path.abspath('file.txt')
print(abs_path)  # 输出文件的绝对路径

3.2 os.path.basename(path):提取路径中最后一个部分

功能:提取路径的最后一个部分(文件名或目录名)。

import os
basename = os.path.basename('/folder/subfolder/file.txt')
print(basename)  # 输出 'file.txt'

3.3 os.path.dirname(path):提取文件所在的目录

功能:提取路径中的目录部分(最后一个部分之前的内容)。

import os
dirname = os.path.dirname('/folder/subfolder/file.txt')
print(dirname)  # 输出 '/folder/subfolder'

3.4 os.path.commonprefix(paths):提取公共前缀

功能:提取路径列表中所有路径的公共前缀部分(注意,paths是路径列表)。

import os
common = os.path.commonprefix(['/folder/subfolder/file1.txt', '/folder/subfolder/file2.txt'])
print(common)  # 输出 '/folder/subfolder/'

4. 路径规范化


4.1 os.path.realpath(sympath):解析符号链接,返回真实路径

功能:解析符号链接,获取实际的文件路径(注意,sympath为符号链接)。

import os
real_path = os.path.realpath('symlink_to_file.txt')
print(real_path)  # 输出真实文件路径

4.2 os.path.normpath(path):消除路径冗余

功能:规范化路径,消除多余的分隔符或上级目录。

import os
path = os.path.normpath('/folder//subfolder/../file.txt')
print(path)  # 输出 '/folder/file.txt',消除了多余的分隔符和上级目录


5. 路径操作


我们以下面这样一个目录为例进行展示:

在这里插入图片描述

☆5.1 os.walk(path):遍历某个路径下的所有子目录和文件(遍历所有)

功能:递归遍历指定目录下的所有目录和文件,并返回每个目录中的文件名。

os.walk()是一个生成器,它会递归遍历指定目录下的所有目录和文件,并返回每个目录中的文件名。它会生成一个三元组(dirpath, dirnames, filenames),其中:

dirpath:当前目录的路径。
dirnames:当前目录下的子目录列表。
filenames:当前目录下的文件列表。

import os
directory = '/data1/dyz/Gaitcode/'
# 使用 os.walk() 遍历目录及其子目录
for dirpath, dirnames, filenames in os.walk(directory):
    print("以下为目录{}的所有子目录和文件。".format(dirpath))
    for dirname in dirnames:
        subdir_path = os.path.join(dirpath, dirname)  # 找到每个子目录的名称
        print("子目录名称:", subdir_path)
    for filename in filenames:
        file_path = os.path.join(dirpath, filename)  # 找到每个文件的名称
        print("文件名称:", file_path)
    print("-------------------------------------------")

结果如下:

在这里插入图片描述


☆5.2 os.listdir(path):列出当前目录下的所有文件和子目录名称(仅当前路径下)

功能:返回指定路径下的文件和目录的名称列表(注意,返回的是一个按字母顺序排列名称的列表,不包含路径)。但不会在更下一级目录中查找,即不会遍历查找。

import os
directory = '/data1/dyz/Gaitcode/'
contents = os.listdir(directory)
print(contents)
# 这段代码将返回:['cal_acc.py', 'test_2024-09-11-02-53-18.log', 'model', 'test.sh', 'answer_list.csv', 
# 'common.py', 'main.py', 'config.py', 'train.sh', 'work']

☆5.3 os.makedirs(path):递归创建目录

功能:递归创建目录。如果父目录不存在,则会创建它们。虽然 os.mkdir(path) 也可以创建目录,但当目录层级较多且可能父目录不存在时,更推荐使用 os.makedirs(path) 来创建目录。

import os
os.makedirs('/data1/dyz/Gaitcode/child', exist_ok=True)

5.4 os.rename(path):重命名

功能:重命名文件或目录。

import os
os.rename('/data1/dyz/Gaitcode/child', '/data1/dyz/Gaitcode/newchild')

5.5 shutil.rmtree(path):删除目录树(包括path本身)

功能:直接删除整个目录树(包括所有文件和子目录),不需要自己手动递归删除,适合用于清空整个目录。

import shutil
dir = '/data1/dyz/Gaitcode/newchild/'
shutil.rmtree(dir)  # 谨慎操作!

5.6 os.remove(path):删除文件

功能:删除某一文件。

import os
os.remove('/path/to/file')

6. 获取目录结构


☆6.1 【bash】tree path:以树状图的方式列出目录结构

功能:Linux 系统自带 tree 命令,可以非常方便地生成目录结构的树状图。

tree /path/to/your/folder

如果希望导出为.txt文件:

tree /path/to/your/folder > directory_tree.txt

结果如下:

在这里插入图片描述


原文地址:https://blog.csdn.net/K2Fe2O7/article/details/143886266

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!