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 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Python闭包函数定义与用法分析
Jul 20 Python
用python生成1000个txt文件的方法
Oct 25 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
Python自动化测试笔试面试题精选
Mar 12 Python
python2和python3哪个使用率高
Jun 23 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
python Selenium 库的使用技巧
Oct 16 Python
Python3爬虫RedisDump的安装步骤
Feb 20 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
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
htm调用JS代码
2007/03/15 Javascript
Javascript 对象的解释
2008/11/24 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
Python实现的爬虫功能代码
2017/06/24 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python中有函数重载吗
2020/05/28 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
python多线程和多进程关系详解
2020/12/14 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
恶搞卫生巾广告词
2014/03/18 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
气象学专业个人求职信
2014/04/22 职场文书
活动总结格式范文
2014/04/26 职场文书
民事起诉状范文
2015/05/19 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书