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学习手册中的python多态示例代码
Jan 21 Python
Python获取Linux系统下的本机IP地址代码分享
Nov 07 Python
Python中实现常量(Const)功能
Jan 28 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
Python下载网络小说实例代码
Feb 03 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
python+pyqt5实现24点小游戏
Jan 24 Python
python3对接mysql数据库实例详解
Apr 30 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 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木马攻击防御之道
2008/03/24 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
php生成无限栏目树
2017/03/16 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
Javascript UrlDecode函数代码
2010/01/09 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
对Python中type打开文件的方式介绍
2018/04/28 Python
详解python3中的真值测试
2018/08/13 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
HTML5 新事件 小结
2009/07/16 HTML / CSS
政治学求职信
2014/06/03 职场文书
大学生标准自荐书
2014/06/15 职场文书
社区节水倡议书
2015/04/29 职场文书
同乡会致辞
2015/07/30 职场文书
《小小的船》教学反思
2016/02/18 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技