Python 把指定文件夹及其所有子文件夹下的文件汇总到一个文件夹下

您所在的位置:网站首页 把多个文件夹中的文件提取到一个文件夹中 Python 把指定文件夹及其所有子文件夹下的文件汇总到一个文件夹下

Python 把指定文件夹及其所有子文件夹下的文件汇总到一个文件夹下

2023-09-11 05:05| 来源: 网络整理| 查看: 265

前言

有个需求,需要把指定文件夹下的所有Excel文件拷贝到一起,重名的文件需重命名,不能覆盖。

为实现需求,需用到os和shutil模块。

os.walk是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。shutil 模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。 os.walk()介绍 os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

参数

top 是所要遍历的文件夹的地址topdown 可选,为True(默认为开启),则优先遍历top目录,否则优先遍历top的子目录。如果topdown参数为True,walk会遍历top文件夹与top文件夹中每一个子目录。onerror 可选,需要一个callable对象,当walk需要异常时,会调用。followlinks 可选,如果为True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

返回值 返回的是一个三元组(root,dirs,files)

root 是当前正在遍历的这个文件夹的地址dirs 是一个 list ,内容是该文件夹中所有的「子文件夹」的名称(不包括子目录)files 同样是 list , 内容是该文件夹中所有的「文件」的名称(不包括子目录) shutil.copy()介绍

shutil.copy(src, dst, *, follow_symlinks=True) 功能

将文件 src 拷贝到文件或目录 dst。 src 和 dst 应为 路径类对象 或字符串。 如果 dst 指定了一个目录,文件将使用 src 中的基准文件名拷贝到 dst 中。 将返回新创建文件所对应的路径。如果 follow_symlinks 为假值且 src 为符号链接,则 dst 也将被创建为符号链接。 如果 follow_symlinks 为真值且 src 为符号链接,dst 将成为 src 所指向的文件的一个副本。

copy() 会拷贝文件数据和文件的权限模式 (参见 os.chmod())。 其他元数据,例如文件的创建和修改时间不会被保留。

执行结果示例 shutil.copy()执行结果

shutil.copy2()介绍 shutil.copy2(src, dst, *, follow_symlinks=True)

功能介绍

类似于 copy(),区别在于 copy2() 还会尝试保留文件的元数据。当 follow_symlinks 为假值且 src 为符号链接时,copy2() 会尝试将来自 src 符号链接的所有元数据拷贝到新创建的 dst 符号链接。 但是,此功能不是在所有平台上均可用。 在此功能部分或全部不可用的平台上,copy2() 将尽量保留所有元数据;copy2() 一定不会由于无法保留文件元数据而引发异常。copy2() 会使用 copystat() 来拷贝文件元数据。

copy2()执行结果示例 shutil.copy2()执行结果示例

需求实现 import shutil,os origin_path = '/Users/ash/project/a' target_path = '/Users/ash/project/b' for o_dir, sub_f, files in os.walk(origin_path): # print('o_dir: ', o_dir) # 当前文件夹「路径」的字符串 # print('sub_f: ', sub_f) # 当前文件夹的「子文件夹的列表」 # print('files: ', files) # 当前文件夹的「文件名称的列表」 for i in range(len(files)): if files[i].endswith(('.xls','.xlsx','.csv')): file_path = o_dir + '/' + files[i] temp_file_name = o_dir.replace(origin_path, '').replace('/', '_') if len(temp_file_name) > 1: temp_file_name = temp_file_name[1:len(origin_path)] + '_' new_path = target_path + '/' + temp_file_name + files[i] shutil.copy2(file_path, new_path)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3