os.path模块篇(一)

os.path.abspath(path)

os.path.abspath() 是 Python 的 os.path 模块中的一个函数,用于返回指定文件或目录的绝对路径。当你有一个相对路径,并且你想知道它对应的绝对路径时,这个函数就很有用。

这里是 os.path.abspath() 的基本用法:

import os

# 假设我们有一个相对路径
relative_path = "./some_directory/sub_directory"

# 使用 os.path.abspath() 来获取绝对路径
absolute_path = os.path.abspath(relative_path)

print(absolute_path)

当你运行上面的代码时,absolute_path 将会打印出 relative_path 对应的绝对路径。这个绝对路径是相对于你的当前工作目录(也就是你运行 Python 脚本的目录)的完整路径。

需要注意的是,os.path.abspath() 返回的路径可能会包含符号链接(如果存在的话)。如果你想要获取物理路径(即不包含任何符号链接的路径),你可以使用 os.path.realpath() 函数。

import os

# 假设我们有一个包含符号链接的路径
link_path = "/path/to/symlink"

# 使用 os.path.realpath() 来获取物理路径
real_path = os.path.realpath(link_path)

print(real_path)

在这个例子中,real_path 将会打印出 link_path 所指向的实际文件或目录的物理路径。

os.path.basename(path)

os.path.basename(path) 是 Python 的 os.path 模块中的一个函数,用于返回指定路径中的文件名部分。如果路径以一个斜杠(在 Unix/Linux/macOS 中)或反斜杠(在 Windows 中)结尾,则返回值将为空字符串。

以下是 os.path.basename() 函数的基本用法:

import os

# 假设我们有一个文件路径
file_path = "/home/user/documents/myfile.txt"

# 使用 os.path.basename() 来获取文件名
filename = os.path.basename(file_path)

print(filename)  # 输出: myfile.txt

在这个例子中,filename 变量将包含路径 /home/user/documents/myfile.txt 中的文件名部分,即 myfile.txt。

os.path.basename() 函数在处理文件和目录路径时非常有用,特别是当你需要从完整的文件路径中提取文件名或目录名时。这个函数特别适用于在编写与文件或目录交互的程序时,因为它可以帮助你专注于路径的最后一部分,而不是整个路径。

例如,如果你正在编写一个脚本,该脚本需要处理多个文件,并且这些文件的路径存储在一个列表中,那么 os.path.basename() 可以帮助你轻松地提取每个文件的名称,而无需进行字符串切片或其他复杂的操作。

os.path.commonpath(paths)

os.path.commonpath(paths) 是 Python 的 os.path 模块中的一个函数,用于找出多个路径中的最长公共路径。这个函数会返回所有给定路径的公共前缀。如果路径没有公共前缀,它将返回一个空字符串。

这里是一个使用 os.path.commonpath() 的例子:

import os

# 定义几个路径
paths = [
    "/home/user/documents/report.txt",
    "/home/user/documents/draft.txt",
    "/home/user/downloads/file.zip"
]

# 找出最长公共路径
common_path = os.path.commonpath(paths)

print(common_path)  # 输出: /home/user

在这个例子中,common_path 将是 “/home/user”,因为这是所有给定路径的最长公共前缀。

os.path.commonpath() 在处理文件路径时非常有用,特别是当你需要确定多个文件或目录之间的共同上级目录时。例如,当你需要将多个文件复制到同一个目录,或者需要确定多个文件相对于某个公共祖先的路径时,这个函数就派上了用场。

请注意,os.path.commonpath() 返回的是路径的字符串表示,而不是一个文件或目录对象。如果你需要执行进一步的文件或目录操作,你可能需要使用其他 os.path 函数或方法。

os.path.commonprefix(list)

os.path.commonprefix(list) 是 Python 的 os.path 模块中的一个函数,它接受一个包含文件或目录路径的列表作为参数,并返回这些路径的最长公共前缀。

这个函数的工作方式与 os.path.commonpath() 类似,但是有一些重要的区别。os.path.commonpath() 返回一个路径,而 os.path.commonprefix() 返回一个字符串,这个字符串是所有路径共有的前缀。如果列表是空的或者没有公共前缀,os.path.commonprefix() 将返回一个空字符串。

下面是一个使用 os.path.commonprefix() 的例子:

import os

# 定义一个包含文件路径的列表
paths = [
    "/home/user/documents/report.txt",
    "/home/user/documents/draft.txt",
    "/home/user/downloads/file.zip"
]

# 找出最长公共前缀
common_prefix = os.path.commonprefix(paths)

print(common_prefix)  # 输出: /home/user

在这个例子中,common_prefix 将会是 “/home/user”,因为这是所有给定路径的最长公共前缀。

与 os.path.commonpath() 相比,os.path.commonprefix() 在处理不包含斜杠的字符串时表现不同。os.path.commonpath() 会尝试找到最长的公共路径,而 os.path.commonprefix() 只会找到最长的公共字符串前缀,这可能包括文件名。

例如:

import os

# 定义一个包含字符串的列表
strings = ["apple", "applesauce", "applejuice"]

# 找出最长公共前缀
common_prefix = os.path.commonprefix(strings)

print(common_prefix)  # 输出: apple

在这个例子中,common_prefix 是 “apple”,因为所有字符串都以 “apple” 开头。

os.path.commonprefix() 函数在处理需要找到共同前缀的字符串列表时非常有用,尤其是在处理文件或目录路径时。

os.path.dirname(path)

os.path.dirname(path) 是 Python 的 os.path 模块中的一个函数,它返回指定文件或目录路径的目录名。换句话说,它会移除路径中的最后一个部分(通常是文件名或最后一个目录名),并返回剩下的部分。

下面是一个使用 os.path.dirname() 函数的例子:

import os

# 假设我们有一个文件路径
file_path = "/home/user/documents/myfile.txt"

# 使用 os.path.dirname() 来获取目录名
directory_name = os.path.dirname(file_path)

print(directory_name)  # 输出: /home/user/documents

在这个例子中,directory_name 变量将包含路径 /home/user/documents/myfile.txt 中的目录部分,即 /home/user/documents。

os.path.dirname() 函数在处理文件路径时非常有用,特别是当你需要获取文件所在的目录时。例如,如果你正在编写一个脚本,该脚本需要读取同一目录下的多个文件,那么你可以使用 os.path.dirname() 来获取当前执行脚本的目录,然后基于这个目录来构建其他文件的路径。

这里还有一个例子,演示了如何使用 os.path.dirname() 来获取脚本自身的目录:

import os

# 获取当前脚本的路径
script_path = os.path.abspath(__file__)

# 使用 os.path.dirname() 来获取脚本所在的目录
script_directory = os.path.dirname(script_path)

print(script_directory)  # 输出: 脚本所在的目录路径

在这个例子中,file 是一个特殊变量,它包含当前脚本的文件名(如果脚本是被直接运行的)。os.path.abspath(file) 会返回脚本的绝对路径,然后 os.path.dirname() 会从这个绝对路径中提取出目录部分。

os.path.exists(path)

os.path.exists(path) 是 Python 的 os.path 模块中的一个函数,用于检查指定的文件或目录路径是否存在。

如果给定的路径存在(无论是文件还是目录),则该函数返回 True;如果路径不存在,则返回 False。

下面是一个使用 os.path.exists() 的例子:

import os

# 定义一个文件或目录路径
file_path = "/path/to/myfile.txt"

# 检查路径是否存在
if os.path.exists(file_path):
    print(f"{file_path} exists.")
else:
    print(f"{file_path} does not exist.")

在这个例子中,如果 /path/to/myfile.txt 这个文件或目录存在,那么将打印出 “/path/to/myfile.txt exists.”;如果不存在,则打印出 “/path/to/myfile.txt does not exist.”。

os.path.exists() 函数在处理文件或目录路径时非常有用,因为它允许你在尝试读取、写入或创建文件之前检查文件或目录是否存在。这可以防止出现文件找不到错误(如 FileNotFoundError),并且可以提高程序的健壮性。

请注意,os.path.exists() 只检查路径是否存在,而不检查路径是否指向一个有效的文件或目录。例如,如果路径是一个损坏的符号链接,os.path.exists() 仍然会返回 True,因为它确实存在,尽管它可能不指向一个有效的文件或目录。要检查路径是否指向一个有效的文件或目录,你可以使用 os.path.isfile() 或 os.path.isdir() 函数。

os.path.lexists(path)

os.path.lexists(path) 是 Python 的 os.path 模块中的一个函数,用于检查指定的文件或目录路径是否存在,无论是普通文件、目录、符号链接还是损坏的符号链接。

与 os.path.exists(path) 不同的是,os.path.lexists(path) 不会跟随符号链接到其目标位置,而是直接检查路径本身是否存在。这意味着,即使是一个损坏的符号链接,os.path.lexists() 也会返回 True,因为它实际上检查的是链接本身的存在性,而不是链接指向的目标。

下面是一个使用 os.path.lexists() 的例子:

import os

# 假设我们有一个文件路径
file_path = "/path/to/myfile.txt"

# 使用 os.path.lexists() 来检查路径是否存在
if os.path.lexists(file_path):
    print(f"{file_path} exists as a path, whether it's a file, directory, "
          f"or a symbolic link (even if broken).")
else:
    print(f"{file_path} does not exist as a path.")

在这个例子中,无论 file_path 指向的是一个实际文件、目录、有效的符号链接还是损坏的符号链接,os.path.lexists(file_path) 都会告诉你该路径是否存在。

使用 os.path.lexists() 可以避免在尝试操作一个不存在的路径时引发异常,同时它也可以用来检查符号链接本身的存在性,而不关心链接是否指向一个有效的目标。在处理文件系统的路径时,这种灵活性可能很有用。

os.path.expanduser(path)

os.path.expanduser() 是 Python 标准库 os.path 模块中的一个函数,用于将路径中的用户主目录缩写(通常是~ 或~username)扩展为用户的完整主目录路径。这对于编写跨平台的脚本或程序,需要引用用户主目录的情况非常有用。

这个函数的行为取决于给定的路径:

  • 如果路径以~ 开头,并且后面没有其他字符,os.path.expanduser() 会将其扩展为当前用户的主目录路径。例如,在 Unix/Linux 系统上,如果当前用户是 john,那么 os.path.expanduser(‘~’) 将返回 /home/john 或 /Users/john(取决于系统配置)。在 Windows 系统上,它可能返回 C:\Users\john。

  • 如果路径以~ 开头,并且后面跟着用户名(如~username),os.path.expanduser() 会尝试将其扩展为指定用户名的主目录路径。例如,os.path.expanduser(‘~john’) 将尝试返回用户 john 的主目录路径。

  • 如果路径中包含其他~ 字符,并且它们后面没有跟用户名,这些~ 字符将不会被扩展。

  • 如果路径不以~ 开头,或者~ 后面跟着的字符不符合用户名格式,os.path.expanduser() 将返回原路径。

以下是一些示例:

import os

# 获取当前用户的主目录
home_dir = os.path.expanduser('~')
print(home_dir)  # 输出当前用户的主目录路径

# 获取指定用户的主目录
other_user_dir = os.path.expanduser('~otheruser')
print(other_user_dir)  # 输出其他用户的主目录路径,如果该用户存在的话

# 路径中不含有~,直接返回原路径
unchanged_path = os.path.expanduser('/some/other/path')
print(unchanged_path)  # 输出:/some/other/path

# 路径中含有多个~,但只扩展第一个
path_with_multiple_tildes = os.path.expanduser('~current_user/~otheruser/path')
print(path_with_multiple_tildes)  # 输出:~current_user/~otheruser/path
# 注意:只有第一个~ 被扩展为当前用户的主目录路径

需要注意的是,如果指定的用户名不存在,os.path.expanduser() 在某些操作系统上可能会抛出异常,例如 FileNotFoundError 或 KeyError。因此,在编写代码时,最好能够妥善处理这种情况。

os.path.expandvars(path)

os.path.expandvars() 是 Python 标准库 os.path 模块中的一个函数,它用于将环境变量名替换为相应的值。这个函数主要用于处理包含环境变量引用的字符串,将这些环境变量替换为它们的实际值。

环境变量通常是以 $ 开头,后面跟着变量名,例如 $HOME 或 $USER。在 Unix 和 Linux 系统上,还可以使用 ${VARNAME} 的格式来引用环境变量。在 Windows 系统上,环境变量使用 %VARNAME% 的格式。

os.path.expandvars() 函数会查找字符串中的环境变量引用,并用它们的实际值替换这些引用。如果环境变量不存在,相应的引用将保持不变。

下面是一些示例:

import os

# 假设当前的环境变量中有 HOME=/home/user 和 USER=user
path = os.path.expandvars('$HOME/Documents/${USER}_files')
print(path)  # 输出:/home/user/Documents/user_files

# 如果环境变量不存在,则保留原样
unknown_var = os.path.expandvars('$UNKNOWN_VAR')
print(unknown_var)  # 输出:$UNKNOWN_VAR

需要注意的是,os.path.expandvars() 只处理字符串中的环境变量引用,并不会检查这些环境变量是否真正存在。此外,这个函数不会递归地处理环境变量的值,也就是说,如果环境变量的值本身还包含其他环境变量引用,这些引用将不会被进一步替换。

在处理路径时,通常会将 os.path.expandvars() 和 os.path.expanduser() 结合使用,以同时处理环境变量和用户主目录的引用:

path = os.path.expanduser(os.path.expandvars('~/${USER}_data/${OTHER_VAR}'))

在这个例子中,~; 会被替换为当前用户的主目录路径,${USER} 和 ${OTHER_VAR} 会被替换为相应的环境变量值。

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫Devin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值