Python实现递归遍历文件夹并删除文件


Posted in Python onApril 18, 2016

思路:

遍历文件夹下面的文件夹
如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除)
删除此文件夹
如果文件夹名称不等于".svn",则递归上面的方法

Python的实现

代码

import os
import shutil
import os.path
import stat
rootdir="F:\\work\\Test"
for parent,dirnames,filenames in os.walk(rootdir): #遍历文件夹下面的所有文件夹 
 
  for dirname in dirnames:   
    if dirname=='.svn':
      strfilepath=parent+os.sep+dirname
      if os.path.isdir(strfilepath):
        os.system('attrib -r ' + parent + '\\*.* /s')#设置本文件夹可写
        os.system('attrib -r ' + strfilepath + '\\*.* /s')#设置父文件夹可写        
        shutil.rmtree(parent+os.sep+dirname)#删除此文件夹

要点:

Walk在os模块下面,用来根据提供的文件夹生成一个generator。每次可以得到一个三元tupple,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
os.system('attrib -r ' + parent + '\\*.* /s') 设置文件夹可写
shutil.rmtree(parent+os.sep+dirname) 删除文件夹(即使文件夹里面有文件)

例二:

Python实现递归遍历指定文件目录(startdir),从而找到所有与指定的文件或目录(target)名相同的文件或目录的绝对路径。

scandir.py :

#! /usr/bin/python
# filename : scandir.py
# author : Jesse
# update : 2011/08/15 10:16

import os

def scandir(startdir, target) :
  os.chdir(startdir)
  for obj in os.listdir(os.curdir) :
    if obj == target :
      print os.getcwd() + os.sep + obj
    if os.path.isdir(obj) :
      scandir(obj, target)
      os.chdir(os.pardir) #!!!

startdir = raw_input('Please input startdir: ')
target = raw_input('Please input target: ')
scandir(startdir, target)

关于该程序的一点说明:

1. 函数scandir的形参target可以是目录名也可以是文件名。
2. 函数chdir的作用是切换到指定目录,该参数必须是有效的且有访问权限的相对路径或绝对路径。
3. 函数的第五行,使用getcwd函数也是为了取得当前绝对路径。
4. 加号作为字符串的连接符。os.sep根据你的操作系统给出目录分隔符,在GNU/Linux和UNIX上它的返回值是'/',在windows上它的返回值是'\\',在Mac OS上是‘:',使用os.sep而不直接使用字符,会提高程序的可移植性。
5. 递归调用后,一定不能忘了os.chdir(os.pardir),返回上层目录(即父目录)。

重要:

1. 理解for中的两个并列的if语句,并列是为了解决目标是文件夹时,该目标文件夹中包含符合要求的文件夹。
2. 如果指定目录中存在访问受限的文件或文件夹,该程序会失败,返回无权访问信息。

例三:

Python递归遍历文件夹,寻找包含某个字符串的文本文件

linux下,如果不使用eclipse的话,想查找某个字符串在哪些文件中出现过就很麻烦,自己写了这个脚本在编码时使用,挺方便的。如果某个文本文件中包含的话,则只记录出现第一次的行数输出
使用方法:
python xxx.py 路径 字符串

python search_content.py /home/www/ abcdefg

search_content.py

#!/use/bin/env python
#-*- coding:utf-8 -*-
import sys,os
filterType = ['gif','png','bmp','jpg','jpeg','rar','zip',
      'ico','apk','ipa','doc','docx','xls','jar',
      'xlsx','ppt','pptx','pdf','gz','pyc','class']
num = 0
def search(path=None,cont=None):
  if not path or not cont:
    print('path or searchString is empty')
    return
  global num
  _loopFolder(path,cont)
  print("%s file find" % num)
def _loopFolder(path,cont):
  arr = path.split('/')
  if not arr[-1].startswith('.'): #不检查隐藏文件夹
    if os.path.isdir(path):
      folderList = os.listdir(path)
      for x in folderList:
        _loopFolder(path+"/"+x,cont)
    elif os.path.isfile(path):
      _verifyContent(path,cont)
def _verifyContent(path,cont):
  if path.split('.')[-1].lower() in filterType:
    return
  global num
  fh = open(path,'r')
  fhContent = fh.readlines()
  fh.close()
  for index,x in enumerate(fhContent):
    if cont in x:
      num += 1
      print("%s  %s" % (path,index+1))
      break
  return
if __name__ == "__main__":
  if len(sys.argv) < 3:
    print("invalid parameters")
  else:
    search(sys.argv[1],sys.argv[2])
Python 相关文章推荐
深入浅析python定时杀进程
Jun 06 Python
打包发布Python模块的方法详解
Sep 18 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
Python实现登陆文件验证方法
Oct 06 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
python cumsum函数的具体使用
Jul 29 Python
python绘制无向图度分布曲线示例
Nov 22 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
python 利用toapi库自动生成api
Oct 19 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 #Python
Python出现segfault错误解决方法
Apr 16 #Python
Python判断值是否在list或set中的性能对比分析
Apr 16 #Python
python中zip()方法应用实例分析
Apr 16 #Python
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 #Python
Python使用redis pool的一种单例实现方式
Apr 16 #Python
说一说Python logging
Apr 15 #Python
You might like
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
JavaScript 字符串乘法
2009/08/20 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python中基础的socket编程实战攻略
2016/06/01 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
七年级音乐教学反思
2014/01/26 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
消防验收申请报告
2015/05/15 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python
关于Redis的主从复制及哨兵问题
2022/06/16 Redis