在 Python 中获取文件扩展名
本教程将介绍如何在 Python 中从文件名中获取文件扩展名。
在 Python 中使用 os.path 模块从文件中提取扩展名
Python 的模块 os.path 预制了有用的实用函数来操作操作系统的文件路径,包括打开、保存和更新,以及从文件路径中获取信息。
我们将使用这个模块来获取 Python 中的文件扩展名。
os.path 有一个函数 splitext(),用来分割给定文件路径的根和扩展名。该函数返回一个包含根字符串和扩展字符串的元组。
让我们提供一个带有 docx 扩展名的文件路径示例。
/Users/user/Documents/sampledoc.docx
预期的输出应该是扩展名 .docx。
声明两个独立的变量 extension 和 root 来捕获 splitext() 的结果。
import os
path = "/Users/user/Documents/sampledoc.docx"
root, extension = os.path.splitext(path)
print("Root:", root)
print("extension:", extension)
输出:
Root: /Users/user/Documents/sampledoc
Extension: .docx
扩展名现在已经从根文件路径成功返回。
在 Python 中使用 pathlib 模块从文件中提取扩展名
pathlib 是一个 Python 模块,它包含代表文件路径的类,并为这些类实现实用函数和常量。
pathlib.Path() 接受一个路径字符串作为参数并返回一个新的 Path 对象。
pathlib.Path 对象有属性 suffix,返回文件扩展信息。
import pathlib
path = pathlib.Path("/Users/user/Documents/sampledoc.docx")
print("Parent:", path.parent)
print("Filename:", path.name)
print("Extension:", path.suffix)
除了根目录外,我们还可以通过简单调用 Path 对象内的属性 parent 和 name 来获取给定文件路径的父文件路径和实际文件名。
输出:
Parent: /Users/user/Documents
Filename: sampledoc.docx
Extension: .docx
如果文件扩展名是 .tar.gz 或 .tar.bz2 呢?
pathlib 还提供了一个属性,用于处理有多个后缀的文件。Path 对象中的属性 suffixes 是一个包含所有给定文件后缀的列表。如果我们使用上面的例子并打印出 suffixes 属性。
import pathlib
path = pathlib.Path("/Users/user/Documents/sampledoc.docx")
print("Suffix(es):", path.suffixes)
输出:
Suffix(es): ['.docx']
所以即使只有一个后缀,输出的结果也会是一个列表。
现在试试用 .tar.gz 扩展名的例子。要将列表转换为单字符串,可以在一个空字符串上使用 join() 函数,并接受 suffixes 属性作为参数。
import pathlib
path = pathlib.Path("/Users/user/Documents/app_sample.tar.gz")
print("Parent:", path.parent)
print("Filename:", path.name)
print("Extension:", "".join(path.suffixes))
输出:
Parent: /Users/user/Documents
Filename: app_sample.tar.gz
Extension: .tar.gz
现在显示的是实际的扩展名,而不是一个列表。
总之,os 和 pathlib 这两个模块提供了在 Python 中从文件路径中获取文件扩展名的方便方法。
os 模块有一个函数 splitext,用于将根和文件名从文件扩展名中分离出来。pathlib 创建一个 Path 对象,并简单地将扩展名存储在 suffix 属性中。
如果你预计一个文件中有多个扩展名,最好使用 pathlib,因为它使用 suffixes 属性为多个扩展名提供了轻松的支持。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn