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计算最大优先级队列实例
Dec 18 Python
Python比较两个图片相似度的方法
Mar 13 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
django用户登录和注销的实现方法
Jul 16 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
python zip()函数使用方法解析
Oct 31 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Flask缓存静态文件的具体方法
Aug 02 Python
如何理解python接口自动化之logging日志模块
Jun 15 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个人网站架设连环讲(一)
2006/10/09 PHP
简化php模板页面中分页代码的解析
2009/02/06 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
javascript add event remove event
2008/04/07 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
Python 硬币兑换问题
2019/07/29 Python
Python绘制热力图示例
2019/09/27 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
《李广射虎》教学反思
2014/04/27 职场文书
关爱留守儿童标语
2014/06/18 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
酒店辞职书范文
2015/02/26 职场文书
先进个人自荐书
2015/03/06 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书