目录
背景
*事情发生在前两天,和我的一个朋友闲聊(暂且称之为小A)。
小A:“对了,问你个问题哦”
我:“什么问题呐?”
小A:“最近负责的一项工作,需要把大批量的PDF文件转换成JGP格式,但转换后这个文件的名字乱码了,并且一个文件都单独存在一个文件夹内,文件夹是原本的文件名,有什么办法可以将文件名批量改成原来的名字,并把所有文件放在一个文件夹内吗?”
问题就是这样,最常规且传统的办法就是,进入文件夹并记住文件夹的名称–>选中文件,右键重命名–>将其移动到指定文件夹。
这样做少量的文件没有问题,但如果是大数据量,既耗时费力又枯燥无趣,那有快捷的办法吗?python写个小代码,即可解决。
那代码该怎样写呢,下面请看破题思路~~~*
破题思路
分析并还原问题
在得到一个问题时,我们要针对问题进行分析,并尽量还原出场景。
通过对小A的问题分析,我们可以模拟出这样一个现场
- 现有1000个文件夹,每个文件夹不同名;
- 每个文件夹内只有一个文件,文件名与文件夹不同名;
( 这里设置样本仅为4,进行还原)
需求分析
接下来,我们需要提炼出核心需求。
- 将1000个文件名称改为所在文件夹名称,并存放在同一个文件夹内
具体思路
- 导入os模块,(即operation system)
- 指定这“4个文件夹”的根目录
- 获取此根目录下的所有文件
- 指定要更改名称的文件类型
- 遍历此目录下所有文件,找到指定类型文件
- 将文件夹名称赋值给该内部文件
- 将更改了名称的文件复制到根目录
编写代码
import os
from shutil import copyfile
path = 'D:\\合并工作文件夹\\1' #文件的根目录,注意把复制过来的路径地址的“\”改为"\\"
files = os.listdir(path) #获取path目录下的所有文件
i = 0
file_type = '.docx' #需要更改的文件类型
j = len(files)
for f in files:
if os.path.isfile(os.path.join(path,f)) == False:
#判断是否为文件夹
for n in os.listdir(os.path.join(path,f)):
# 判断是否为指定类型的文件
if os.path.splitext(n)[1] == str(file_type):
# 文件夹名称赋值给文件
newname = f+file_type
os.rename(os.path.join(path,f,n),os.path.join(path,f,newname))
# 将文件从文件夹内复制到外层文件夹
copyfile(os.path.join(path,f,newname),os.path.join(path,newname))
i += 1
print(i)
print(j)
# 如果输出的两个数字不相等,可能是没有指定类型文件,或某文件夹下非该类型文件
运行代码
那么看下效果吧,此时可以核对一下文件内容和之前是否一致,可根据需要将不需要的文件夹全选删除~~~