国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現遞歸遍歷文件夾并刪除文件

2020-01-04 17:32:11
字體:
來源:轉載
供稿:網友
本文給大家匯總了3個Python實現遍歷文件夾并刪除的代碼,主要是給大家分享下這3種方法的實現思路,有需要的小伙伴可以參考下
 

思路:

遍歷文件夾下面的文件夾
如果文件夾名稱等于".svn",則修改文件夾的屬性(因為".svn"的文件都是只讀的,你不能直接刪除)
刪除此文件夾
如果文件夾名稱不等于".svn",則遞歸上面的方法

Python的實現

代碼

import osimport shutilimport os.pathimport statrootdir="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:16import osdef 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,osfilterType = ['gif','png','bmp','jpg','jpeg','rar','zip',      'ico','apk','ipa','doc','docx','xls','jar',      'xlsx','ppt','pptx','pdf','gz','pyc','class']num = 0def 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  returnif __name__ == "__main__":  if len(sys.argv) < 3:    print("invalid parameters")  else:    search(sys.argv[1],sys.argv[2])

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 化州市| 莎车县| 东乡县| 湘阴县| 城步| 八宿县| 卢龙县| 马关县| 北宁市| 苍山县| 公安县| 都昌县| 香港| 昌都县| 高台县| 息烽县| 平利县| 盐边县| 福清市| 法库县| 伊川县| 尼勒克县| 云霄县| 安康市| 都匀市| 东乡族自治县| 云龙县| 德令哈市| 高邑县| 巴里| 潼关县| 安达市| 临澧县| 怀安县| 龙游县| 鄯善县| 柘城县| 汉阴县| 汶川县| 玉门市| 上蔡县|