python解放文件夹脚本

本文用 Python 实现了将文件夹中 一级子文件夹内的文件 批量自动化移动脚本,内涵源码。

动机

用 WPS 下载模版的时候,WPS 会把 PPT 外面套一个文件夹的壳,如下图:

可能是为了防止 PPT 名字一样而覆盖?不清楚为什么,但是很影响使用,下载的多了的话还要手动一个一个拖出来。

重复机械的工作不应该由人类去干,于是就想着用 Python 写一个自动化脚本来帮助去掉文件夹的壳,一劳永逸。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import os
import shutil
src_folder = r'D:\3下载\WPS下载模板\下载'+'\\'
des_folder = r'D:\3下载\WPS下载模板\科技风'+'\\'
#直接粘贴地址栏复制好的src和des分别替换前一个引号里面的
folders = os.listdir(src_folder)#读取src下的文件及文件夹
if not os.path.exists(des_folder):#不存在目标路径就创建
os.makedirs(des_folder)
des_folders =os.listdir(des_folder)#读取des下文件及文件夹
for i in folders:#遍历得到的文件及文件夹
if os.path.isdir(src_folder + i):#如果是文件夹,向下执行
files = os.listdir(src_folder + i)#读取子文件夹下的所有文件及文件夹
if len(files) == 0:#空文件夹直接删除
os.rmdir(src_folder + i)
for j in files:#遍历子文件夹下所有文件
if j in des_folders:#若与目标路径文件夹中内容有同名不予操作,并输出路径
print("有同名文件:" + src_folder + i + '\\' + j)
else:
src_path = src_folder + i + '\\' + j#得到子文件夹下的内容路径
if os.path.isfile(src_path):#如果是文件,准备移动
shutil.move(src_path,des_folder)#移动
des_folders = os.listdir(des_folder)#更新des_folders内容
if len(os.listdir(src_folder + i)) == 0:#移动后再次检查文件夹,空则删除
os.rmdir(src_folder + i)

效果

PPT 被从原路径输出到目标路径,没有了文件夹,可以选择 src_folderdes_folder 相同,原地输出。

若碰到同名的文件,会输出提示信息,并打印出来同名文件的路径,可以自行处理。

移动过后,src_folder 中剩下的空文件夹会被删除。

拓展

其实上述代码完全符合在我最初场景的期望,所以可以到此为止了。

可以改进的地方,同名以后直接加后缀再移动,不过考虑到重名的几率很小,基本不会重名,或者重名的文件也不会太多,就留下自行处理吧。

此代码只移动一级目录,文件夹里套文件夹会被忽略。自己目前也没有遇到这种需求,故没有加入这个功能。或许遇到了再实现吧。