如何在Python中更改文件扩展名?


文件扩展名通过帮助识别文件包含的内容类型发挥着至关重要的作用。更改文件扩展名的任务在各种用例中很常见,例如转换文件格式、重命名文件以确保兼容性或确保特定应用程序正确解释文件。Python 作为一种用途广泛且功能强大的编程语言,提供了多种方法来更改文件的扩展名。

在这篇信息丰富且富有启发性的文章中,我们将探讨在 Python 中更改文件扩展名的不同技术。我们将提供分步说明和代码示例来指导您完成此过程。无论您是喜欢使用字符串方法操作文件路径,使用“os”模块、“pathlib”模块还是第三方库,本指南都将为您提供轻松更改 Python 项目中文件扩展名的知识。

让我们开始这段使用 Python 进行文件处理的旅程,学习如何更改文件扩展名!

使用字符串方法更改文件扩展名

更改文件扩展名最简单的方法之一是利用字符串方法来操作文件名。此方法包括根据现有扩展名拆分文件名,修改扩展名,并将名称和扩展名重新组合以形成新的文件名。

示例

  • 在下面的代码中,我们定义了 `change_file_extension_with_string_methods()` 函数,该函数将 `filename` 和 `new_extension` 作为输入,并返回带有更改扩展名的新的文件名。

  • 该函数首先检查文件名是否包含点 (.) 以确定它是否已具有扩展名。如果它有,我们使用 `rsplit('.', 1)` 拆分名称和旧扩展名。

  • `rsplit('.', 1)` 方法在 '.' 的最后一次出现处拆分字符串,以处理名称中包含点的文件名。

  • 然后,我们将名称与 `new_extension` 和一个点 (.) 连接起来,以形成新的文件名 (`new_filename`)。

  • 如果文件名没有现有的扩展名,我们只需将 `new_extension` 连接到文件名以创建新的文件名。

def change_file_extension_with_string_methods(filename, new_extension):
    if '.' in filename:
        name, old_extension = filename.rsplit('.', 1)
        new_filename = name + '.' + new_extension
    else:
        new_filename = filename + '.' + new_extension
    return new_filename

使用 os.path 模块更改文件扩展名

“os.path”模块提供了一种跨平台的方式来处理 Python 中的文件路径。我们可以使用此模块来操作文件名并更改其扩展名。

示例

  • 在此示例中,我们导入了“os”模块,该模块提供了与操作系统交互(包括文件和目录操作)的函数。

  • `change_file_extension_with_os_path()` 函数将 `filename` 和 `new_extension` 作为输入,并返回带有更改扩展名的新的文件名。

  • 我们使用 `os.path.splitext(filename)` 将文件名拆分为基本名称(不带扩展名的名称)和扩展名。

  • `os.path.splitext()` 函数返回一个元组,其中包含给定文件名的基本名称和扩展名。

  • 然后,我们将基本名称与 `new_extension` 和一个点 (.) 连接起来,以形成新的文件名 (`new_filename`)。

import os

def change_file_extension_with_os_path(filename, new_extension):
    base_name = os.path.splitext(filename)[0]
    new_filename = base_name + '.' + new_extension
    return new_filename

使用 pathlib 模块更改文件扩展名

“pathlib”模块提供了一种面向对象的方法来处理 Python 中的文件路径。我们可以利用“Path”类来操作文件名并更改其扩展名。

示例

  • 在此示例中,我们从“pathlib”模块导入了“Path”类,该类表示文件系统路径。

  • `change_file_extension_with_pathlib()` 函数将 `filename` 和 `new_extension` 作为输入,并返回带有更改扩展名的新的文件名。

  • 我们使用 `Path(filename)` 创建一个“Path”对象来表示输入文件名。

  • 我们使用“Path”对象的 `with_suffix()` 方法将扩展名更改为 `new_extension`。

  • `with_suffix()` 方法返回一个具有更新扩展名的新的“Path”对象,我们将其存储在 `new_filename` 变量中。

from pathlib import Path

def change_file_extension_with_pathlib(filename, new_extension):
    path_object = Path(filename)
    new_filename = path_object.with_suffix('.' + new_extension)
    return new_filename

使用 shutil 模块更改文件扩展名

Python 中的“shutil”模块提供了高级文件操作。虽然其主要目的是处理文件复制和删除,但它也可以用于更改文件扩展名。

示例

  • 在此示例中,我们导入了“shutil”模块,该模块提供了高级文件操作函数。

  • `change_file_extension_with_shutil()` 函数将 `src_filename`(具有当前扩展名的文件)和 `dst_filename`(具有所需扩展名的文件)作为输入,并通过重命名来更改文件的扩展名。

  • 我们使用 `shutil.move(src_filename, dst_filename)` 将文件从 `src_filename` 移动到 `dst_filename`。

  • `shutil.move()` 函数有效地重命名文件并在此过程中更改其扩展名。

import shutil

def change_file_extension_with_shutil(src_filename, dst_filename):
    shutil.move(src_filename, dst_filename)

使用 pyrenamer 库更改文件扩展名

如果您想使用新的扩展名重命名文件,您可以使用内置的 os 模块来实现这一点,无需任何外部库。以下是如何使用 os.rename 函数更改文件扩展名的示例

我们使用 `os.path.isfile()` 函数检查具有给定文件名的文件是否存在。然后,我们使用 `os.path.splitext()` 构造具有所需 `new_extension` 的新文件名。最后,我们使用 `os.rename()` 执行重命名操作。

import os

def change_file_extension(filename, new_extension):
    # Check if the file exists before renaming
    if os.path.isfile(filename):
        file_name, old_extension = os.path.splitext(filename)
        new_filename = file_name + '.' + new_extension
        try:
            os.rename(filename, new_filename)
            print(f"File '{filename}' renamed to '{new_filename}' with new extension.")
        except Exception as e:
            print(f"Error occurred while renaming the file: {e}")
    else:
        print(f"File '{filename}' not found.")

# Example usage
filename = 'example.txt'
new_extension = 'pdf'
change_file_extension(filename, new_extension)

输出

File 'example.txt' not found.

更改文件扩展名是文件处理和操作中的常规任务。在本文中,我们探讨了在 Python 中更改文件扩展名的各种方法。我们学习了如何使用字符串方法操作文件名,利用“os.path”和“pathlib”模块,使用“shutil”模块进行高级文件操作,以及使用“os.rename”函数进行批量重命名任务。

有了这些知识,您就可以自信地在 Python 项目中更改文件扩展名,无论您是处理单个文件还是批量处理文件。

更新于:2023年9月11日

14K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告