Python 代码优化:根据 .xlsm 文件名创建文件夹并复制文件

本文提供 Python 代码,根据目标文件夹中的 .xlsm 文件名,在目标文件夹中创建同名文件夹,并将文件复制到该文件夹。代码优化了逻辑,并处理了部分特殊情况,例如文件名包含“Copy of”。

import os
import shutil

path1 = '/path/to/source/folder'
path3 = '/path/to/destination/folder'

for file in os.listdir(path3):
    if file.endswith('.xlsm'):
        folder_name = os.path.splitext(file)[0]  # 文件夹名称为去除后缀名的文件名
        found_folder = False
        prev_folder_path = None
        for root, dirs, files in os.walk(path3):
            if found_folder:
                break  # 如果已经找到同名文件夹,则退出循环
            if folder_name in dirs:
                src_folder = os.path.join(root, folder_name)
                if 'Copy of ' in os.path.basename(src_folder):
                    continue  # 如果找到的是复制的文件夹,则跳过
                if found_folder and src_folder != prev_folder_path:
                    continue  # 如果已经找到同名文件夹,但路径与之前不同,则跳过
                rel_path = os.path.relpath(src_folder, path3)
                dest_folder = os.path.join(path3, rel_path)
                if not os.path.exists(dest_folder):
                    os.makedirs(dest_folder)
                file_path = os.path.join(root, file)
                shutil.copy(file_path, dest_folder)
                found_folder = True
                prev_folder_path = src_folder
        if not found_folder:
            found_file = False
            filenames = [os.path.splitext(f)[0] for f in os.listdir(path1)]  # 获取 path1 中所有文件的名称(不含后缀)
            if folder_name in filenames:
                src_folder = os.path.join(path1, folder_name)
                if 'Copy of ' in os.path.basename(src_folder):
                    continue  # 如果找到的是复制的文件夹,则跳过
                if found_folder and src_folder != prev_folder_path:
                    continue  # 如果已经找到同名文件夹,但路径与之前不同,则跳过
                found_file = True
                rel_path = os.path.relpath(src_folder, path1)  # 获取 src_folder 与 path1 的相对路径
                dest_folder = os.path.join(path3, rel_path)  # 在 path3 下创建同样的子目录
                if not os.path.exists(dest_folder):
                    os.makedirs(dest_folder)
                file_path = os.path.join(path3, file)
                shutil.copy(file_path, dest_folder)
                prev_folder_path = src_folder
            if not found_file:
                dest_folder = os.path.join(path3, '没找到对应的文件路径')
                if not os.path.exists(dest_folder):
                    os.makedirs(dest_folder)
                file_path = os.path.join(path3, file)
                shutil.copy(file_path, dest_folder)

代码说明:

  1. 遍历目标文件夹: 代码首先遍历目标文件夹 path3 中的所有文件。
  2. 判断文件类型: 筛选出所有以 .xlsm 结尾的文件。
  3. 提取文件名: 从文件名中提取去除后缀的部分,作为目标文件夹的名称。
  4. 查找同名文件夹: 在目标文件夹中查找同名文件夹,并进行以下判断:
    • 如果找到同名文件夹,则退出循环。
    • 如果找到的是“Copy of”开头的文件夹,则跳过。
    • 如果之前已经找到过同名文件夹,但路径不同,则跳过。
  5. 创建文件夹: 如果没有找到同名文件夹,则根据文件名在目标文件夹中创建同名文件夹。
  6. 复制文件: 将当前文件复制到新创建的文件夹中。
  7. 查找源文件夹: 如果在目标文件夹中没有找到同名文件夹,则在源文件夹 path1 中查找同名文件。
  8. 创建文件夹: 如果在源文件夹中找到同名文件,则根据文件所在路径在目标文件夹中创建同名文件夹,并将文件复制到该文件夹。
  9. 处理未找到情况: 如果在目标文件夹和源文件夹中都没有找到同名文件,则创建一个名为“没找到对应的文件路径”的文件夹,并将文件复制到该文件夹。

代码优化:

  • 代码添加了对“Copy of”文件夹的判断,防止将复制的文件夹作为目标文件夹。
  • 代码添加了对已找到同名文件夹的判断,防止重复创建文件夹。
  • 代码优化了文件夹创建和文件复制的逻辑,使其更加简洁。

使用说明:

  1. 将代码中的 path1path3 替换为实际的源文件夹路径和目标文件夹路径。
  2. 运行代码即可根据 .xlsm 文件名创建文件夹并复制文件。

注意:

  • 代码仅适用于以 .xlsm 为后缀的文件。
  • 代码假设源文件夹和目标文件夹中的文件名不重复。
  • 代码中使用了 shutil.copy() 函数来复制文件,如果需要其他复制方式,请修改代码。

希望本文能够帮助你更好地理解代码,并将其应用到实际项目中。

Python 代码优化:根据 .xlsm 文件名创建文件夹并复制文件

原文地址: https://www.cveoy.top/t/topic/nDmE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录