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中的lambda表达式的用法
Aug 28 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
tensorflow学习笔记之mnist的卷积神经网络实例
Apr 15 Python
python 输出所有大小写字母的方法
Jan 02 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
如何基于Python创建目录文件夹
Dec 31 Python
Python print不能立即打印的解决方式
Feb 19 Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
Python如何把不同类型数据的json序列化
Apr 30 Python
python开发的自动化运维工具ansible详解
Aug 07 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
用PHP开发GUI
2006/10/09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
Python日志模块logging基本用法分析
2018/08/23 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
python操作toml文件的示例代码
2020/11/27 Python
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
行政专员工作职责
2013/12/22 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
高中打架检讨书
2014/02/13 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
师范生自荐信模板
2014/05/28 职场文书
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技