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 相关文章推荐
gearman的安装启动及python API使用实例
Jul 08 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
Django中Model的使用方法教程
Mar 07 Python
解决python3 json数据包含中文的读写问题
May 10 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
Python中的 enum 模块源码详析
Jan 09 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
wxPython实现文本框基础组件
Nov 18 Python
Python使用sqlite3模块内置数据库
May 07 Python
Python flask框架端口失效解决方案
Jun 04 Python
用Python 执行cmd命令
Dec 18 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
学习php笔记 字符串处理
2010/10/19 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
php查询ip所在地的方法
2014/12/05 PHP
ThinkPHP控制器详解
2015/07/27 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
Python对象类型及其运算方法(详解)
2017/07/05 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
浅述python2与python3的简单区别
2018/09/19 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
运动员代表致辞
2015/07/29 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
Python利用zhdate模块实现农历日期处理
2022/03/31 Python