今日是实战篇。python的强大不仅仅是表现在那些大牛手中,上到网络游戏,各种网站和软件;下到一个小助手,小爬虫都可以见到python的身影。这也是我第一次自己实战解决比较实际的问题(而不是移个盘子,算算数列什么的)。
首先因为我平时听古典音乐,而古典音乐的特点是出名作曲家少,作品多,且演奏版本很多,所以我很难从我的浩瀚如烟的硬盘中快速找到一个曲子,然后复制到我的电脑上(可怜我一个117G的固态已经快装满了,因此只能用硬盘装音乐了)。下图是我的音乐数量:384G,1750个文件夹。
python可以通过os和shutil模块来操作系统中的文件和文件夹,这两个模块非常强大,我在这里只是小试牛刀。这里为了演示需要我从电脑音乐目录中搜寻'莫扎特'的音乐并复制到一个新建的文件夹中:
可以发现里面由四个包含'莫扎特'单词的文件夹。下面我编写代码把他们copy到我的'test'文件夹中
# -*- coding: utf-8 -*-
importos,shutil
# 目标音乐所在文件夹
music_folder =\
r'C:\Users\ludwi\Music\classic music'
# 提取文件夹中音乐文件到list中
music_list = os.listdir(music_folder)
# 新建的文件夹
# (我要提取Mozart的音乐,故命名为'Mozart')
new_music_folder =\
r'C:\Users\ludwi\Music\test\Mozart'
deffind_mozart(s):
return'莫扎特'ins
mozart_list =\
list(filter(find_mozart,music_list))
i =
formusicinmozart_list:
music_path =\
os.path.join(music_folder,music)
new_music_path =\
new_music_folder +str(i)
shutil.copytree\
(music_path,new_music_path)
i +=1
(为了手机端的朋友能看完全代码我已经用'\'拆行了,结果还是差强人意。)
为了剔除含'莫扎特'的文件夹我用了'filter()'函数,这里的
os.listdir
是一个提取目标文件夹中的所有文件或文件夹的函数,十分有用。而
shutil.copytree(a, b)
是把a文件夹copy'为'b文件夹,如果b文件夹已存在,是不可以的,所以我把每个文件夹按'Mozart0','Mozart1'......命名的。
执行代码后结果为:
正好是这四个文件,目标完成。
缺点:
命名很难看;
无法同时搜寻文件夹和文件夹下的文件夹和文件夹下的文件夹的文件夹......;
没有使用面对对象编程的思想。
领取专属 10元无门槛券
私享最新 技术干货