在处理文件时,常常需要获取文件名但不包括其扩展名(即后缀)。这可能用于创建备份文件、组织文件夹或进行批量重命名等任务。Python 提供了多种方法来实现这一点,本教程中简鹿办公将介绍几种常见的技术。
os.path 模块提供了与操作系统路径相关的实用函数。其中的 splitext() 函数可以方便地分离文件名和扩展名。
import os
def get_filename_without_extension(file_path):
# 使用 splitext() 分离文件名和扩展名,并返回文件名部分
return os.path.splitext(os.path.basename(file_path))[0]
# 示例用法
file_path = "example_folder/example_file.txt"
print(get_filename_without_extension(file_path)) # 输出: example_file
从 Python 3.4 开始引入的 pathlib 模块提供了一种面向对象的方式来处理文件系统路径。它使得代码更加直观易读。
from pathlib import Path
def get_filename_without_extension(file_path):
# 创建 Path 对象并调用 stem 属性获取不含扩展名的文件名
return Path(file_path).stem
# 示例用法
file_path = "example_folder/example_file.txt"
print(get_filename_without_extension(file_path)) # 输出: example_file
对于简单的场景,您也可以选择直接操作字符串。这种方法虽然不如前两种方式优雅,但在某些情况下仍然适用。
def get_filename_without_extension(file_path):
# 找到最后一个点的位置,并切片得到文件名部分
file_name = os.path.basename(file_path)
dot_index = file_name.rfind('.')
if dot_index != -1:
return file_name[:dot_index]
else:
return file_name
# 示例用法
file_path = "example_folder/example_file.txt"
print(get_filename_without_extension(file_path)) # 输出: example_file
当处理文件名时,可能会遇到一些特殊的情况,例如没有扩展名的文件、隐藏文件(以.开头)或多点扩展名(如 .tar.gz)。以下是如何应对这些情况的方法:
无扩展名文件:如果文件没有扩展名,上述三种方法都会返回整个文件名。
隐藏文件:通常,隐藏文件的第一个字符是.。如果您想要忽略这一点,可以在处理之前去掉这个字符。
多点扩展名:对于像.tar.gz这样的多点扩展名,pathlib 的 suffixes 属性可以帮助识别所有扩展名,而不仅仅是最后一个。
from pathlib import Path
def handle_special_cases(file_path):
path = Path(file_path)
print("Original:", path.name) # 完整文件名
print("Stem:", path.stem) # 不含任何扩展名的文件名
print("Suffixes:", path.suffixes) # 所有扩展名列表
# 示例用法
handle_special_cases(".hidden_file")
handle_special_cases("archive.tar.gz")
通过以上几种方法,您可以轻松地使用 Python 获取文件名而不包含其扩展名。根据您的具体需求和偏好选择最合适的方式。无论是在脚本中处理少量文件还是开发大型应用程序,掌握这些技巧都能使您的代码更加简洁高效。
当然,对于普通用户而言,如果你觉得上述方法获取文件名比较麻烦,那么也可以通过使用简鹿文件批量重命名进行一键批量获取,该软件支持 Windows 和 Mac 系统,大家可以放心的使用。