Code Snippet : Python 递归遍历文件夹,并对文件夹中的文件做相应的操作

最近偶然想到在安卓手机上跑python程序,用于筛选删除越来越多的手机微信图片。

刚好发现的确有一个 QPython 的项目可以实现这个功能,于是着手写py脚本。

写这个脚本有一个核心的程序,就是遍历整个 Tencent/MicroMsg/<用户id号的32位加密值>image2 路径,都是像如下这种目录分布的,手工找起来非常麻烦

 

 

这就需要用递归功能来让脚本帮助我们处理这些琐事。

之前已经推荐过一篇关于递归的文章《神奇的递归》,本文只是对上一篇文章的学以致用。

废话不多说,代码片段如下

 1 import os,sys
 2 
 3 def search(path):
 4     with open('rename_png.log',mode='a+') as f:
 5         try:
 6             for p in os.listdir(path):
 7                 pp = os.path.join(path,p)
 8                 if(os.path.isdir(pp)):
 9                     search(pp)
10                 else:
11                     solve(pp)
12                     f.write(pp+'\n')
13                     if(pp.endswith('newpng')):
14                         os.rename(pp,pp[:-3]+'.png')
15                     if(pp.endswith('new.jpg')):
16                         os.rename(pp,pp.split('.')[0]+'.png')
17                     # if(pp.endswith('.png') or pp.endswith('.jpg')):
18                     #     pass
19                     # else:
20                     #     os.rename(pp,pp+'new.jpg')
21         except PermissionError:
22             print('Path:{} have No Permiss'.format(path))
23             # pass
24 
25 def solve(pp):
26     print(pp)
27     pass
28 
29 if __name__ == '__main__':
30     if len(sys.argv) > 1:
31         search(sys.argv[1])
32     else:     
33         search('image2/')

上述代码的意思是遍历文件夹(line6),列取文件夹中的文件,若仍然是文件夹,则递归子文件夹(line9),若是文件,则处理文件(line11)

如此,假如以后需要递归文件夹,就可以复制上述代码段,只需要定制solve的内容按需要处理文件即可。

这里需要补充几个 snippets ,例如:

os.listdir(path) # 罗列path路径下的文件,同cmd中的dir,和terminal中的ls,list

os.path.join(path,p) # 拼接路径
os.path.split(path) # 分隔文件的路径和名称
os.path.isdir(pp) # 检测pp是否是文件夹,true; 若是文件,false os.getcwd() # get current work dir 获取当前路径名称 os.path.getsize(pathfile) # 获取文件的大小 Byte

os.rename(a,b)
# 重命名a为b

 

posted @ 2020-03-22 18:05  缘起花渊  阅读(585)  评论(0编辑  收藏  举报