Python 处理文件路径字符串

202 阅读3分钟

在写Python代码时候,经常遇到文件路径的处理,下面记录一下相应功能的实现方法。

假设一个路径是 /path/to/your/file.txt

获取文件名,不包含路径

  1. 使用os.path模块的basename函数获取文件名:
import os

filename = os.path.basename('/path/to/your/file.txt')
print(filename)
# file.txt
  1. 纯字符分割
file_path = '/path/to/your/file.txt'
filename = file_path.split('/')[-1]
print(filename)
# file.txt

这种方式不好的地方在于Windows下可能用的反斜杠分隔。代码跨平台的效果不好。

  1. 正则表达式
import re

file_path = '/path/to/your/file.txt'
filename = re.search(r'[^/]+$', file_path).group()
print(filename)
# file.txt

与上面字符分割同样的问题。

  1. 使用pathlib
from pathlib import Path

file_path = Path('/path/to/your/file.txt')
filename = file_path.name
print(filename)
# file.txt

获取文件名的后缀

方法一:使用os模块的splitext()函数

import os
 
filename = "/path/to/your/file.txt"
base_name, file_extension = os.path.splitext(file_path) 
print(file_extension)  # 输出:.txt

方法二:使用split()函数进行分割

filename = "/path/to/your/file.txt"
file_extension = filename.split(".")[-1]
print(file_extension)  
# 输出:txt

方法三:使用正则表达式

import re
 
filename = "/path/to/your/file.txt"
file_extension = re.findall(r".([^.]+)$", filename)[0]
print(file_extension)  
# 输出:txt

方法四:使用字符串处理函数rsplit()进行分割

filename = "/path/to/your/file.txt"
file_extension = filename.rsplit(".", 1)[-1]
print(file_extension)  
# 输出:txt

获取文件名不带后缀

/path/to/your/file.txt 转换为 /path/to/your/file

在Python中,如果你想获取一个文件名但不包括其扩展名,你可以使用os.path模块或者pathlib模块。这两种方法都可以帮助你从完整的文件路径中去除扩展名。下面是两种方法的示例:

使用os.path模块

import os
 
# 假设你有以下文件路径
file_path = '/path/to/your/file.txt'
 
# 使用os.path.splitext获取文件名和扩展名
base_name, extension = os.path.splitext(file_path)
 
# base_name就是不带扩展名的文件名
print(base_name)  # 输出: /path/to/your/file

使用pathlib模块(推荐,因为它是面向对象的)

from pathlib import Path
 
# 假设你有以下文件路径
file_path = Path('/path/to/your/file.txt')
 
# 使用with_suffix方法去除扩展名,或者使用stem属性获取不带扩展名的文件名
base_name = file_path.with_suffix('').name  # 或者使用 file_path.stem
 
print(base_name)  # 输出: file

pathlib的例子中,使用with_suffix('')会创建一个新的路径对象,它的扩展名被移除。如果你只想获取不带扩展名的文件名而不更改路径结构,可以使用stem属性:

print(file_path.stem)  # 输出: file

这样,你就可以根据需要选择适合的方法来获取不带扩展名的文件名。pathlib是Python 3中推荐的文件路径操作库,因为它提供了更清晰和面向对象的接口。如果你正在使用Python 3,推荐使用pathlib。如果你使用的是Python 2,那么使用os.path会是更好的选择。

获取文件的路径,不包括当前文件

/path/to/your/file.txt 转换为 /path/to/your

在Python中,你可以使用os.path模块或者pathlib模块来获取一个文件所在的文件夹(目录)。以下是两种方法的示例:

使用os.path模块

import os
 
# 假定这是你的文件路径
file_path = "/path/to/your/file.txt"
 
# 使用os.path.dirname获取目录路径
directory_path = os.path.dirname(file_path)
 
print(directory_path)

使用pathlib模块

pathlib是Python 3.4及以上版本引入的一个更现代的路径操作库。它提供了面向对象的方式来处理文件系统路径。

from pathlib import Path
 
# 假定这是你的文件路径
file_path = Path("/path/to/your/file.txt")
 
# 使用parent属性获取目录路径
directory_path = file_path.parent
 
print(directory_path)

这两种方法都可以有效地获取文件所在的文件夹路径。pathlib通常被推荐为更现代和面向对象的方法,而os.path则在需要兼容老版本Python时仍然很有用。选择哪一种取决于你的具体需求和Python版本。

给定路径,获取文件所在的当前路径

/path/to/your/file.txt 转换为 your

方法一:使用pathlib模块(推荐)

from pathlib import Path

file_path = Path("/path/to/your/file.txt")
folder_name = file_path.parent.name
print(folder_name)  # 输出: your

方法二:使用os.path模块

import os

file_path = "/path/to/your/file.txt"
dir_path = os.path.dirname(file_path)
folder_name = os.path.basename(dir_path)
print(folder_name)  # 输出: your

总结

处理文件路径的字符串时,最好不要直接对字符串进行分割和拼接操作。可以使用Python的os库或者 pathlib库,这样就不用关心跨平台,使用斜线还是反斜杠的问题,也不用考虑文件路径末尾是否有斜线的问题。

如果你是用的Python3,就直接选pathlib吧。