在 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