从 Python 中的文件名中删除扩展名

目录

Remove the extension from a Filename in Python

  1. 从 Python 中的文件名中删除扩展名
  2. 使用 pathlib.Path 从文件名中删除扩展名
  3. 使用 removesuffix() 从文件名中删除扩展名
  4. 使用 str.rsplit() 从文件名中删除扩展名

在 Python 中删除文件名的扩展名

使用该os.path.splitext()方法从文件名中删除扩展名,例如result = os.path.splitext(file_path)[0]. os.path.splitext方法将返回一个元组,其中包含不带扩展名的文件名作为其第一个元素。

主程序
import os file_path = '/home/bobbyhadz/Desktop/my-file.txt' result = os.path.splitext(file_path)[0] # 👇️ '/home/bobbyhadz/Desktop/my-file' print(result) # 👇️ '/home/bobbyhadz/Desktop/my-file.docx' print(result + '.docx')

我们使用该os.path.splitext方法从文件名中删除扩展名。

os.path.splitext方法将

路径拆分为包含根和扩展的元组。

主程序
import os file_path = '/home/bobbyhadz/Desktop/my-file.txt' # 👇️ ('/home/bobbyhadz/Desktop/my-file', '.txt') print(os.path.splitext(file_path))

要获取不带扩展名的文件名,请访问元组中的第一个元素。

如果指定的路径不包含扩展名,则元组中的第二个元素为空字符串。

主程序
import os file_path = '/home/bobbyhadz/Desktop/my-file' # 👇️ ('/home/bobbyhadz/Desktop/my-file', '') print(os.path.splitext(file_path))

如果提供的路径没有扩展名,我们将按原样返回字符串。

如果路径包含多个句点,则忽略之前的句点。

主程序
import os import pathlib file_path = '/home/bobby.hadz/Desktop/my-file.txt' # 👇️ ('/home/bobby.hadz/Desktop/my-file', '.txt') print(os.path.splitext(file_path))

或者,您可以使用pathlib.Path()该类。

使用 pathlib.Path 从文件名中删除扩展名

要从文件名中删除扩展名:

  1. 实例化pathlib.Path()类以创建 Path 对象。
  2. 使用该with_suffix()方法从文件名中删除扩展名。
主程序
import pathlib file_path = '/home/bobbyhadz/Desktop/my-file.txt' fpath = pathlib.Path(file_path) result = fpath.with_suffix('') print(result) # 👉️ /home/bobbyhadz/Desktop/my-file print(fpath.stem) # 👉️ 'my-file' # 👇️ '/home/bobbyhadz/Desktop/my-file.docx' print(result.with_suffix('.docx'))

pathlib.Path
类用于根据您的操作系统创建一个
一个对象PosixPathWindowsPath

with_suffix

方法采用后缀并更改路径的后缀

我们首先将一个空字符串传递给该方法以从文件名中删除扩展名。

如果需要添加一个扩展名,您可以选择调用具有不同扩展名的方法。

主程序
import pathlib file_path = '/home/bobbyhadz/Desktop/my-file.txt' fpath = pathlib.Path(file_path) result = fpath.with_suffix('') print(result) # 👉️ /home/bobbyhadz/Desktop/my-file print(fpath.stem) # 👉️ 'my-file' # 👇️ '/home/bobbyhadz/Desktop/my-file.docx' print(result.with_suffix('.docx'))

如果您只需要获取没有扩展名的文件名,则可以在对象上使用
stem
属性。
Path

或者,您可以使用该removesuffix()方法。

使用 removesuffix() 从文件名中删除扩展名

使用该str.removesuffix()方法从文件名中删除扩展名,例如result = file_path.removesuffix('.txt'). removesuffix()方法将从文件名中删除指定的扩展名。

主程序
file_path = '/home/bobbyhadz/Desktop/my-file.txt' result = file_path.removesuffix('.txt') print(result) # 👉️ '/home/bobbyhadz/Desktop/my-file' print(result + '.docx') # 👉️ '/home/bobbyhadz/Desktop/my-file.docx'

str.removesuffix()方法在 Python 3.9+ 中可用。

str.removesuffix
方法检查字符串
是否
以指定的后缀结尾,如果是,则该方法返回一个不包括后缀的新字符串,否则返回原始字符串的副本。

主程序
# 👇️ '/home/bobbyhadz/Desktop/my-file' print('/home/bobbyhadz/Desktop/my-file.txt'.removesuffix('.txt')) # 👇️ '/home/bobbyhadz/Desktop/my-file' print('/home/bobbyhadz/Desktop/my-file'.removesuffix('.txt'))

如果字符串不包含指定的后缀,则该方法按原样返回字符串。

确保您运行的是 Python 3.9 或更高版本,以便能够使用该
str.removesuffix方法。

或者,您可以使用该str.rsplit()方法。

使用 str.rsplit() 从文件名中删除扩展名

要从文件名中删除扩展名:

  1. 使用该str.rsplit()方法将文件名从右侧拆分为句点一次。
  2. 访问 index 处的列表项0
  3. 索引处的列表项0将包含不带扩展名的文件名。
主程序
file_path = '/home/bobbyhadz/Desktop/my-file.txt' result = file_path.rsplit('.', 1)[0] print(result) # 👉️ '/home/bobbyhadz/Desktop/my-file' print(result + '.docx') # 👉️ '/home/bobbyhadz/Desktop/my-file.docx'

str.rsplit
方法使用提供的分隔符作为分隔符字符串返回字符串中的单词列表

主程序
file_path = '/home/bobbyhadz/Desktop/my-file.txt' # 👇️ ['/home/bobbyhadz/Desktop/my-file', 'txt'] print(file_path.rsplit('.', 1))

该方法采用以下 2 个参数:

姓名 描述
分隔器 在每次出现分隔符时将字符串拆分为子字符串
最大分裂 最多maxsplit完成拆分,最右边的(可选)

除了从右边分裂,rsplit()表现得像split().

我们在句号上从右边拆分文件名一次。

这种方法处理文件名不包含任何句点的情况。

主程序
file_path = '/home/bobbyhadz/Desktop/my-file' result = file_path.rsplit('.', 1)[0] print(result) # 👉️ '/home/bobbyhadz/Desktop/my-file'

但是,如果文件名包含句点但不包含扩展名,则会导致混淆行为。

主程序
file_path = '/home/bobby.hadz/Desktop/my-file' # 👇️ ['/home/bobby', 'hadz/Desktop/my-file'] print(file_path.rsplit('.', 1)) result = file_path.rsplit('.', 1)[0] print(result) # 👉️ '/home/bobby'

前面介绍的方法在这种情况下更为宽容。