使用场景:
- 文件目录结构为:外层文件夹 - 内层文件夹 - 具体的文件
- 操作实现:将最内层文件按照【内层文件夹-序号.文件后缀】进行重命名,然后移动到一个汇总文件夹中
具体代码:
import os
import shutil
# 方法(两个参数分别为待操作的目录、目标目录)
# 注意:目标目录必须提前创建好
def rename_and_copy(o_path, t_path):
# 判断输入的路径是否正确,以及目标文件夹是否存在
if not os.path.exists(o_path):
return print("源文件夹不存在!请检查源文件目录是否存在!")
if not os.path.exists(t_path):
os.makedirs(t_path)
# 用os.walk方法取得path路径下的文件夹路径,子文件夹名,所有文件名
for folders, sub_folders, file_names in os.walk(o_path):
# 遍历所有子文件夹(目的为获得子文件夹的目录,以及继续在此基础上遍历此文件夹内的文件)
for sub_folder in sub_folders:
# 得到当前文件夹的目录(字符串)
sub_folders_dir = os.path.join(folders, sub_folder)
# 开始遍历此文件下的每个文件
i = 0 # 为了给每个文件加序号
for file_name in os.listdir(sub_folders_dir):
# 1.制作文件的新名称:文件夹名-序号-文件后缀
# 翻个参数分别为:文件所属文件夹的名称、序号、文件的后缀
new_file_name = sub_folders_dir.split("\\")[1] + "-" + str(i) + "." + file_name.split(".")[1]
i += 1 # 别忘了序号递增
# 2.重命名文件
os.rename(os.path.join(sub_folders_dir, file_name), os.path.join(sub_folders_dir, new_file_name))
# 3.复制到指定文件夹
shutil.copy(os.path.join(sub_folders_dir, new_file_name), t_path)
return print("执行完毕!")
效果测试
1.需求:
test文件夹下有三个文件夹:文件夹a、文件夹b、文件夹c
其中,
文件夹a中存放文件a.txt
文件夹b中存放文件b.jpg
文件夹c中存放文件c.png
现需要将test文件夹下的所有文件,按照【文件夹-序号.文件后缀】 的形式重命名,并且统一复制到同一个目标文件夹target中。
2.实现:
- 新建一个.py文件,直接将上放的python方法,复制进来;
- 调用上放的方法,执行py程序,即可完成所需操作
# 声明两个变量,分别为原始目录和目标文件目录
or_path = "I:/test"
target_path = "I:/target_path"
# 调用函数
rename_and_copy(or_path, target_path)
执行后效果: