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操作Excel之xlsx文件
Mar 24 Python
PyTorch学习笔记之回归实战
May 28 Python
Python延时操作实现方法示例
Aug 14 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
django框架使用方法详解
Jul 18 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
Python脚本导出为exe程序的方法
Mar 25 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
flask项目集成swagger的方法
Dec 09 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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 冒泡排序算法的实现代码
2010/08/08 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
Prototype Class对象学习
2009/07/19 Javascript
javascript 函数速查表
2010/02/07 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
面包屑导航详解
2017/12/07 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
数控专业毕业生自荐信范文
2014/03/04 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
门店店长岗位职责
2015/04/14 职场文书
小学生表扬稿范文
2015/05/05 职场文书
离婚律师函范本
2015/05/27 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python