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 获取文件列表(或是目录例表)
Mar 25 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
python3下载抖音视频的完整代码
Jun 05 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
python3实现简单飞机大战
Nov 29 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
Apr 06 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实现的一个简单json rpc框架实例
2015/03/30 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
Javascript Global对象
2009/08/13 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
对Python 语音识别框架详解
2018/12/24 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
django框架创建应用操作示例
2019/09/26 Python
Python程序控制语句用法实例分析
2020/01/14 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
Europcar比利时:租车
2019/08/26 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
主治医师岗位职责
2013/12/10 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
求职信范文怎么写
2015/03/19 职场文书
公司酒会主持词
2015/07/02 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
一行Python命令实现批量加水印
2022/04/07 Python