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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
跟老齐学Python之画圈还不简单吗?
Sep 20 Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 Python
利用python批量检查网站的可用性
Sep 09 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
python读取xlsx的方法
Dec 25 Python
python区块及区块链的开发详解
Jul 03 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
Python小程序 控制鼠标循环点击代码实例
Oct 08 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 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附件下载中文名称乱码的解决方法
2015/12/17 PHP
CI框架常用函数封装实例
2016/11/21 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
python表格存取的方法
2018/03/07 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
python实现简单的文字识别
2018/11/27 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
python字典的常用方法总结
2019/07/31 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
python中的对数log函数表示及用法
2020/12/09 Python
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
迎元旦广播稿
2014/02/22 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
小学大队长竞选稿
2015/11/20 职场文书
如何写好开幕词?
2019/06/24 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android