程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python之办公自动化文件操作

hfteth 2025-08-03 04:55:35 技术文章 4 ℃

无论是查找文件、复制文件,还是删除文件,这些事情虽然简单,但手动操作起来既耗时又容易出错。幸运的是,Python 提供了强大的文件操作功能,可以帮助我们高效地完成这些任务。

本文将通过具体的代码示例,详细讲解如何使用 Python 来实现文件操作的自动化,之后可以让AI帮忙写代码,方便灵活的使用。

#01快速定位目标文件

文件查找是文件操作中最基础的任务。无论是查找单个文件,还是查找特定后缀的文件,Python 都能轻松搞定。

(一)查找指定文件夹中的文件

假设你有一个文件夹,里面存放了各种文件,你想要快速找到某个特定的文件。可以使用 os.listdir() 方法来列出文件夹中的所有文件,然后通过简单的条件判断来查找目标文件。

import os

# 获取当前脚本所在的目录
cur_dir = os.path.dirname(os.path.abspath(__file__))
# 定位到目标文件夹
find_path = os.path.join(cur_dir, 'files')

# 提示用户输入要查找的文件名
find_file_name = input(f"请输入想在 {find_path} 中查找的文件名(按 q 退出):")

# 遍历文件夹中的文件
for item in os.listdir(find_path):
    # 如果找到目标文件,打印文件路径并退出循环
    if item == find_file_name:
        print(f"文件找到:{os.path.join(find_path, item)}")
        break
else:
    # 如果没有找到文件,打印提示信息
    print("文件未找到")

代码说明

  • os.listdir(find_path):列出指定路径下的所有文件和文件夹。
  • os.path.join(find_path, item):将文件夹路径和文件名拼接成完整的文件路径。
  • for...else 结构:如果循环正常结束(没有被 break 中断),则执行 else 块中的代码。


(二)递归查找文件

如果文件夹中包含多个子文件夹,而你需要在所有文件夹中查找某个文件,可以使用 os.walk() 方法。这个方法可以递归遍历文件夹及其子文件夹,帮助找到目标文件。

import os

# 获取当前脚本所在的目录
cur_dir = os.path.dirname(os.path.abspath(__file__))
# 定位到目标文件夹
find_path = os.path.join(cur_dir, 'files')

# 提示用户输入要查找的文件名
find_file_name = input(f"请输入想在 {find_path} 中查找的文件名(按 q 退出):")

# 使用 os.walk() 递归遍历文件夹
for root, dirs, files in os.walk(find_path):
    # 遍历当前文件夹中的文件
    for file in files:
        # 如果找到目标文件,打印文件路径并退出循环
        if file == find_file_name:
            print(f"文件找到:{os.path.join(root, file)}")
            break
    else:
        # 如果当前文件夹中没有找到文件,继续查找下一个文件夹
        continue
    # 如果找到文件,退出外层循环
    break
else:
    # 如果所有文件夹中都没有找到文件,打印提示信息
    print("文件未找到")

代码说明

  • os.walk(find_path):递归遍历指定路径下的所有文件夹和文件。
  • root:当前文件夹的路径。
  • files:当前文件夹中的文件列表。


(三)查找特定后缀的文件

有时候,我们可能需要查找某个文件夹中所有特定后缀的文件,比如所有的 .txt 文件或 .xlsx 文件。

可以通过 path.splitext() 方法获取文件的后缀名,并通过条件判断来筛选目标文件。os.

import os

# 获取当前脚本所在的目录
cur_dir = os.path.dirname(os.path.abspath(__file__))
# 定位到目标文件夹
find_path = os.path.join(cur_dir, 'files')

# 提示用户输入要查找的文件后缀
extension_name = input("请输入要查找的文件后缀名(如 .txt、.xlsx 等):")
# 将输入的后缀名转换为小写,并添加点号
extensions = ['.' + ext.strip().lower() for ext in extension_name.split(",")]

# 初始化找到的文件计数器
found_files_count = 0

# 遍历文件夹中的文件
for item in os.listdir(find_path):
    # 获取文件的后缀名
    extension = os.path.splitext(item)[1].lower()
    # 如果文件后缀符合要求,打印文件名并增加计数器
    if extension in extensions:
        print(f"找到文件:{item}")
        found_files_count += 1

# 打印找到的文件总数
print(f"一共有 {found_files_count} 个文件")

代码说明

  • os.path.splitext(item):将文件名分割成文件名和后缀名两部分。
  • extension.lower():将后缀名转换为小写,以便进行不区分大小写的比较。
  • extensions:将用户输入的后缀名列表转换为小写,并添加点号。


#02高效管理文件

除了查找文件,我们还需要对文件进行各种操作,比如复制文件、移动文件、删除文件等。

这些操作不仅可以帮助我们更好地管理文件,还可以节省大量的时间和精力。

(一)批量复制文件

假设你有一个文件夹,里面存放了多个文件,你想要将这些文件复制到另一个文件夹中。可以使用 shutil.copy() 方法来复制文件。

import os
import shutil

# 提示用户输入源文件夹路径
source_folder_name = input("请输入源文件夹路径:")
# 提示用户输入目标文件夹路径
target_folder = input("请输入目标文件夹路径:")

# 遍历源文件夹中的文件
for item in os.listdir(source_folder_name):
    # 构造源文件的完整路径
    source_file = os.path.join(source_folder_name, item)
    # 构造目标文件的完整路径
    target_file = os.path.join(target_folder, item)
    # 复制文件
    shutil.copy(source_file, target_file)
    print(f"文件 {item} 已复制到 {target_folder}")

代码说明

  • shutil.copy(source_file, target_file):将源文件复制到目标路径。


(二)批量移动文件

如果需要将文件从一个文件夹移动到另一个文件夹,可以使用 shutil.move() 方法。这个方法不仅会复制文件,还会删除原文件,从而实现文件的移动。

import os
import shutil

# 提示用户输入源文件夹路径
source_folder_name = input("请输入源文件夹路径:")
# 提示用户输入目标文件夹路径
target_folder = input("请输入目标文件夹路径:")

# 遍历源文件夹中的文件
for item in os.listdir(source_folder_name):
    # 构造源文件的完整路径
    source_file = os.path.join(source_folder_name, item)
    # 构造目标文件的完整路径
    target_file = os.path.join(target_folder, item)
    # 移动文件
    shutil.move(source_file, target_file)
    print(f"文件 {item} 已移动到 {target_folder}")

代码说明

  • shutil.move(source_file, target_file):将源文件移动到目标路径。


(三)批量删除文件

如果需要删除某个文件夹中的所有文件,可以使用 os.remove() 方法。在删除文件之前,建议先确认一下,以免误删重要文件。

import os

# 提示用户输入文件夹路径
folder_name = input("请输入要删除文件的文件夹路径:")

# 遍历文件夹中的文件
for item in os.listdir(folder_name):
    # 构造文件的完整路径
    file_path = os.path.join(folder_name, item)
    # 删除文件
    os.remove(file_path)
    print(f"文件 {item} 已删除")

代码说明

  • os.remove(file_path):删除指定路径的文件。


#02 模块化,让代码更简洁、更高效

在实际工作中,常常需要重复使用某些功能。为了避免重复编写代码,可以将这些功能封装成模块,方便在其他项目中重复使用。

以下是一个简单的模块化示例,包含了文件查找、复制、移动和删除的功能。

import os
import shutil

# 定义查找文件的函数
def find_files(folder_name, file_name):
    """
    在指定文件夹中查找文件
    :param folder_name: 文件夹路径
    :param file_name: 要查找的文件名
    :return: 文件路径列表
    """
    found_files = []
    for root, dirs, files in os.walk(folder_name):
        for file in files:
            if file == file_name:
                found_files.append(os.path.join(root, file))
    return found_files

# 定义复制文件的函数
def copy_files(source_folder_name, target_folder, file_extension='*'):
    """
    复制指定后缀的文件
    :param source_folder_name: 源文件夹路径
    :param target_folder: 目标文件夹路径
    :param file_extension: 文件后缀,默认为所有文件
    :return: None
    """
    for item in os.listdir(source_folder_name):
        if item.endswith(file_extension):
            source_file = os.path.join(source_folder_name, item)
            target_file = os.path.join(target_folder, item)
            shutil.copy(source_file, target_file)
            print(f"文件 {item} 已复制到 {target_folder}")

# 定义移动文件的函数
def move_files(source_folder_name, target_folder, file_extension='*'):
    """
    移动指定后缀的文件
    :param source_folder_name: 源文件夹路径
    :param target_folder: 目标文件夹路径
    :param file_extension: 文件后缀,默认为所有文件
    :return: None
    """
    for item in os.listdir(source_folder_name):
        if item.endswith(file_extension):
            source_file = os.path.join(source_folder_name, item)
            target_file = os.path.join(target_folder, item)
            shutil.move(source_file, target_file)
            print(f"文件 {item} 已移动到 {target_folder}")

# 定义删除文件的函数
def delete_files(folder_name, file_extension='*'):
    """
    删除指定后缀的文件
    :param folder_name: 文件夹路径
    :param file_extension: 文件后缀,默认为所有文件
    :return: None
    """
    for item in os.listdir(folder_name):
        if item.endswith(file_extension):
            file_path = os.path.join(folder_name, item)
            os.remove(file_path)
            print(f"文件 {item} 已删除")  

代码说明

  • os.walk(folder_name):递归遍历文件夹及其子文件夹。
  • shutil.copy(source_file, target_file):复制文件
  • shutil.move(source_file, target_folder):移动文件。
  • os.remove(file_path)):删除文件。


在实际工作中,我们可以根据需求对这些代码进行修改和扩展。

希望本文的介绍能够帮助你快速掌握 Python 文件操作技巧,提高办公效率。

最近发表
标签列表