在写Python代码时候,经常遇到文件路径的处理,下面记录一下相应功能的实现方法。
假设一个路径是 /path/to/your/file.txt
获取文件名,不包含路径
- 使用
os.path模块的basename函数获取文件名:
import os
filename = os.path.basename('/path/to/your/file.txt')
print(filename)
# file.txt
- 纯字符分割
file_path = '/path/to/your/file.txt'
filename = file_path.split('/')[-1]
print(filename)
# file.txt
这种方式不好的地方在于Windows下可能用的反斜杠分隔。代码跨平台的效果不好。
- 正则表达式
import re
file_path = '/path/to/your/file.txt'
filename = re.search(r'[^/]+$', file_path).group()
print(filename)
# file.txt
与上面字符分割同样的问题。
- 使用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吧。