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