在 Python 中获取文件扩展名

Rayven Esplanada 2023年1月30日
  1. 在 Python 中使用 os.path 模块从文件中提取扩展名
  2. 在 Python 中使用 pathlib 模块从文件中提取扩展名
在 Python 中获取文件扩展名

本教程将介绍如何在 Python 中从文件名中获取文件扩展名。

在 Python 中使用 os.path 模块从文件中提取扩展名

Python 的模块 os.path 预制了有用的实用函数来操作操作系统的文件路径,包括打开、保存和更新,以及从文件路径中获取信息。

我们将使用这个模块来获取 Python 中的文件扩展名。

os.path 有一个函数 splitext(),用来分割给定文件路径的根和扩展名。该函数返回一个包含根字符串和扩展字符串的元组。

让我们提供一个带有 docx 扩展名的文件路径示例。

/Users/user/Documents/sampledoc.docx

预期的输出应该是扩展名 .docx

声明两个独立的变量 extensionroot 来捕获 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 对象内的属性 parentname 来获取给定文件路径的父文件路径和实际文件名。

输出:

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

现在显示的是实际的扩展名,而不是一个列表。

总之,ospathlib 这两个模块提供了在 Python 中从文件路径中获取文件扩展名的方便方法。

os 模块有一个函数 splitext,用于将根和文件名从文件扩展名中分离出来。pathlib 创建一个 Path 对象,并简单地将扩展名存储在 suffix 属性中。

如果你预计一个文件中有多个扩展名,最好使用 pathlib,因为它使用 suffixes 属性为多个扩展名提供了轻松的支持。

Rayven Esplanada avatar Rayven Esplanada avatar

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

相关文章 - Python File