插件窝 干货文章 Python如何高效提取文件路径字符串中的所有文件夹名称?

Python如何高效提取文件路径字符串中的所有文件夹名称?

path folders folder 模块 295    来源:    2025-03-12

在Python中,你可以使用os.path模块或pathlib模块来高效地提取文件路径字符串中的所有文件夹名称。以下是两种方法的示例:

方法1:使用 os.path 模块

import os

def extract_folder_names(path):
    # 规范化路径,去除多余的斜杠
    normalized_path = os.path.normpath(path)

    # 使用 os.path.split 递归拆分路径
    folders = []
    while True:
        normalized_path, folder = os.path.split(normalized_path)
        if not folder:
            break
        folders.append(folder)

    # 反转列表以保持原始顺序
    folders.reverse()
    return folders

# 示例
path = "/home/user/projects/my_project/src/utils"
folders = extract_folder_names(path)
print(folders)  # 输出: ['home', 'user', 'projects', 'my_project', 'src', 'utils']

方法2:使用 pathlib 模块

pathlib 是Python 3.4引入的一个模块,提供了面向对象的路径操作方式,代码更加简洁。

from pathlib import Path

def extract_folder_names(path):
    # 创建 Path 对象
    path_obj = Path(path)

    # 获取所有父目录的名称
    folders = [part for part in path_obj.parts if part != path_obj.anchor]

    return folders

# 示例
path = "/home/user/projects/my_project/src/utils"
folders = extract_folder_names(path)
print(folders)  # 输出: ['home', 'user', 'projects', 'my_project', 'src', 'utils']

方法3:使用 os.path.splitos.path.dirname

import os

def extract_folder_names(path):
    folders = []
    while True:
        path, folder = os.path.split(path)
        if not folder:
            break
        folders.append(folder)

    # 反转列表以保持原始顺序
    folders.reverse()
    return folders

# 示例
path = "/home/user/projects/my_project/src/utils"
folders = extract_folder_names(path)
print(folders)  # 输出: ['home', 'user', 'projects', 'my_project', 'src', 'utils']

总结

  • os.path 模块:适用于Python 2和3,代码稍显冗长,但功能强大。
  • pathlib 模块:Python 3.4+ 推荐使用,代码简洁且面向对象。

根据你的需求和Python版本,选择合适的方法即可。