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内置函数Type()函数一个有趣的用法
Feb 18 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
python看某个模块的版本方法
Oct 16 Python
【python】matplotlib动态显示详解
Apr 11 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
Aug 13 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
Python学习之os模块及用法
Jun 03 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 Python
python使用shell脚本创建kafka连接器
Apr 29 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
jQuery 全选效果实现代码
2009/03/23 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
jQuery层级选择器用法分析
2015/02/10 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
Python使用py2exe打包程序介绍
2014/11/20 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
python matplotlib拟合直线的实现
2019/11/19 Python
python实现udp聊天窗口
2020/03/31 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
祖国在我心中演讲稿
2014/01/15 职场文书
大班幼儿评语大全
2014/04/30 职场文书
白血病捐款倡议书
2014/05/14 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
被告答辩状范文
2015/05/22 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python