zoukankan      html  css  js  c++  java
  • 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+'
    ')
    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
  • 相关阅读:
    单例模式
    堆排序--leetcode 215
    二叉树--路径问题
    二叉树--前中后序两两结合构建二叉树
    CglibProxy
    JdkProxy
    git config --global http.sslVerify false
    PdfUtil
    idea中创建的文件类型无法识别
    sql优化
  • 原文地址:https://www.cnblogs.com/yqmcu/p/12547409.html
Copyright © 2011-2022 走看看