python遍历文件夹及子文件夹下所有文件并复制到同一文件夹下

3是正式复制文件的代码,1-2只是测试路径和文件名是否正确以及写个新文件名单

1.获取路径+文件名构建新文件名

import os
import shutil

import pandas as pd

# 原文件夹的路径
source_folder = "."

# 文件要放到的根目录路径
destination_root = ".\\省"

# 遍历原文件夹及其子文件夹,将文件复制到根目录并修改文件名
for root, dirs, files in os.walk(source_folder):
    for file in files:
        file_path = os.path.join(root, file)
        file_name = os.path.splitext(file)[0]  # 获取文件名(不包括扩展名)
        file_extension = os.path.splitext(file)[1]  # 获取文件扩展名
        # 路径+原文件名构建新的文件名
        new_file_name = os.path.join(destination_root, os.path.normpath(root) + "_" + file_name) + file_extension
        # 输出新文件名
        print(new_file_name)

2.将新文件名放到excel_files中


import os
import shutil

import pandas as pd

# 目标文件夹的路径
source_folder = "."

# 根目录的路径
destination_root = ".\\省"

excel_files = []

# 遍历目标文件夹及其子文件夹,将文件
<think>好的,用户想用Python编写脚本来递归遍历文件夹中的所有DWG文件复制到文件夹中。我需要先理清需求。首先,用户需要遍历目录及其目录,找到所有扩展名为.dwg的文件。然后,将这些文件复制到一个目标文件夹中。 接下来,考虑如何实现递归遍历Python的os模块中的os.walk函数可以遍历目录树,这应该适用。每次遍历会得到根目录、目录列表和文件列表,所以需要循环处理每个文件,检查扩展名是否为.dwg。 然后是复制文件。shutil模块的copy2函数可以复制文件保留元数据,这可能比copy更好。另外,需要处理目标路径,确保目标文件夹存在,可能使用os.makedirs配合exist_ok=True参数来创建目录结构。 需要注意的几个问题:目标路径的构造,可能需要保持原目录结构,或者全部放在同一文件夹中。用户的需求是复制到文件夹,但可能希望保持结构,或者只是单纯复制所有文件同一位置。如果保持结构,需要将相对路径添加到目标文件夹中;如果不需要,则可以直接复制到目标文件夹根目录,但可能会有同名文件被覆盖的风险。这里可能需要进一步询问用户,但根据一般情况,保持目录结构可能更安全,所以代码中应该处理路径,确保在目标文件夹中创建相同的目录。 另外,权限问题,是否有权限读取源文件和写入目标文件夹。需要异常处理,但用户可能希望简单的脚本,所以暂时可以忽略,或者添加try-except块提示错误。 现在,组装代码。首先导入os和shutil模块。然后定义源文件夹和目标文件夹的路径。使用os.walk遍历文件夹,对于每个文件,检查是否以.dwg结尾。如果是,构造源文件路径和目标文件路径,其中目标路径是目标文件夹加上相对源文件夹的路径。使用os.path.dirname创建目标目录,如果不存在则创建。然后使用shutil.copy2复制文件。 测试一下,比如源文件夹是/path/to/source,目标文件夹是/path/to/destination。当遍历到source/subdir/file.dwg时,目标路径应为destination/subdir/file.dwg,这样保持结构。这需要获取文件相对于源文件夹的路径,可以使用os.path.relpath函数,然后结合目标文件夹路径。 可能的错误点:路径拼接是否正确,特别是跨平台的问题。使用os.path.join来处理路径拼接会更安全。 现在编写示例代码,注释说明每一步。然后生成相关问题,考虑用户可能的后续疑问,比如如何处理重复文件,如何排除某些目录,如何异步复制等。</think>要实现Python递归遍历文件夹复制所有DWG文件,可以通过以下步骤实现: ### 解决方案 1. **导入模块** ```python import os import shutil ``` 2. **定义路径参数** ```python source_dir = "/path/to/source/folder" # 原始文件夹路径 target_dir = "/path/to/target/folder" # 目标文件夹路径 ``` 3. **递归遍历文件系统** ```python for root, dirs, files in os.walk(source_dir): for file in files: if file.lower().endswith(".dwg"): # 检测DWG文件(不区分大小写) src_path = os.path.join(root, file) # 构造目标路径(保持原目录结构) relative_path = os.path.relpath(root, source_dir) dest_folder = os.path.join(target_dir, relative_path) os.makedirs(dest_folder, exist_ok=True) # 自动创建目录 # 复制文件保留元数据 shutil.copy2(src_path, dest_folder) ``` ### 关键点说明 - `os.walk()` 会递归遍历所有目录[^1] - `shutil.copy2()` 比普通复制多保留文件数据(如修改时间) - `os.makedirs(..., exist_ok=True)` 可避免目录已存在的报错 - 使用`.lower()`确保兼容不同大小写的扩展名(如.DWG/.dwg) ### 完整脚本示例 ```python import os import shutil def copy_dwg_files(src, dst): for root, dirs, files in os.walk(src): for filename in files: if filename.lower().endswith(".dwg"): src_file = os.path.join(root, filename) relative_path = os.path.relpath(root, src) dest_dir = os.path.join(dst, relative_path) if not os.path.exists(dest_dir): os.makedirs(dest_dir) shutil.copy2(src_file, dest_dir) print(f"已复制: {src_file} -> {dest_dir}") if __name__ == "__main__": source = input("输入源文件夹路径: ") destination = input("输入目标文件夹路径: ") copy_dwg_files(source, destination) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值