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缩进区别分析
Feb 15 Python
简单使用Python自动生成文章
Dec 25 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
Python复数属性和方法运算操作示例
Jul 21 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
通俗讲解python 装饰器
Sep 07 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
js更优雅的兼容
2010/08/12 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
Python中pass的作用与使用教程
2020/11/13 Python
python里反向传播算法详解
2020/11/22 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
师德师风剖析材料
2014/09/30 职场文书
卖房协议书样本
2014/10/30 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
学生会任命书范本
2015/09/21 职场文书