摘要:遞歸遍歷目錄和文件作業(yè)和習(xí)題獲取當(dāng)前目錄下所有文件及文件目錄遍歷列表拼接絕對路徑目錄文件棧深度遍歷目錄文件隊(duì)列廣度遍歷目錄文件復(fù)制目錄和文件復(fù)制目錄如果源目錄不存在直接停止如果目標(biāo)文件不存在或者如果該文件
遞歸遍歷目錄和文件
import os path = r"F:PycharmProjectsasic gram作業(yè)和習(xí)題 est" def getAllFileAndDir(path): # 獲取當(dāng)前目錄下所有文件及文件目錄 fileList = os.listdir(path) # print(fileList) # 遍歷fileList列表 for fileName in fileList: # isdir isfile # print(fileName) # 拼接絕對路徑 absFile = os.path.join(path,fileName) if os.path.isdir(absFile): print(absFile+"---目錄") getAllFileAndDir(absFile) else: print(absFile+"---文件") getAllFileAndDir(path)棧 深度遍歷
import collections def getAllFileAndDir(sourcePath): stack = collections.deque() stack.append(sourcePath) while len(stack) != 0: path = stack.pop() fileList = os.listdir(path) for fileName in fileList: absFile = os.path.join(path, fileName) if os.path.isdir(absFile): print(absFile+"---目錄") stack.append(absFile) else: print(absFile+"---文件") getAllFileAndDir(path)隊(duì)列 廣度遍歷
def getAllFileAndDir(sourcePath): queue = collections.deque() queue.append(sourcePath) while len(queue) !=0: path = queue.popleft() fileList = os.listdir(path) for fileName in fileList: absFile = os.path.join(path, fileName) if os.path.isdir(absFile): print(absFile+"---目錄") queue.append(absFile) else: print(absFile+"---文件") getAllFileAndDir(path)復(fù)制目錄和文件
import os # 復(fù)制目錄 def copyDir(sourDir,targetDir): if not os.path.exists(sourDir): print("如果源目錄不存在,直接停止") return if not os.path.exists(targetDir): os.makedirs(targetDir) listName = os.listdir(sourDir) for dirNameAndFileName in listName: sourAbsPath = os.path.join(sourDir,dirNameAndFileName) targetAbsPath = os.path.join(targetDir,dirNameAndFileName) if os.path.isdir(sourAbsPath): copyDir(sourAbsPath,targetAbsPath) if os.path.isfile(sourAbsPath): # 如果目標(biāo)文件不存在, 或者 如果該文件已經(jīng)存在但是文件大小不一樣 if (not os.path.exists(targetAbsPath)) or (os.path.exists(targetAbsPath) and (os.path.getsize(sourAbsPath) != os.path.getsize(targetAbsPath))): rf = open(sourAbsPath,"rb") wf = open(targetAbsPath,"wb") while True: content = rf.read(1024*1024) if len(content) == 0: break wf.write(content) wf.flush() wf.close() rf.close() sPath = r"F:PycharmProjectsasic gram作業(yè)和習(xí)題 est" tPath = r"F:PycharmProjectsasic gram作業(yè)和習(xí)題 estNew" copyDir(sPath, tPath)文件復(fù)制實(shí)例
1.一個(gè)函數(shù)接受文件夾的名稱作為輸入?yún)?shù),請將該文件夾中的所有文件復(fù)制到 文件夾名-副本 中去,請補(bǔ)充缺失的代碼. (20分)
def copyFile(sPath)
2.題1復(fù)制過程中,每隔一秒打印一次復(fù)制進(jìn)度(即當(dāng)前已復(fù)制個(gè)數(shù)/總文件個(gè)數(shù))(15分)
import os import collections import time import sys def getFileNum(sPath): num = 0 stack = collections.deque() stack.append(sPath) while len(stack) != 0: path = stack.pop() fileList = os.listdir(path) for fileName in fileList: absFile = os.path.join(path, fileName) if os.path.isdir(absFile): stack.append(absFile) else: num += 1 return num def copyFile(sPath): tPath = r"F:PycharmProjectsasic gram作業(yè)和習(xí)題Anaconda3-副本" stack1 = collections.deque() stack1.append(sPath) stack2 = collections.deque() stack2.append(tPath) timepoint = 1 filenum = 0 while len(stack1) != 0: sPath = stack1.pop() tPath = stack2.pop() if not os.path.exists(tPath): os.makedirs(tPath) listName = os.listdir(sPath) for filename in listName: absfile = os.path.join(sPath, filename) tabsfile = os.path.join(tPath, filename) if os.path.isdir(absfile): stack1.append(absfile) stack2.append(tabsfile) else: rf = open(absfile, "rb") wf = open(tabsfile, "wb") while True: content = rf.read(1024*1024) if len(content) == 0: break wf.write(content) # 刷新緩沖區(qū) wf.flush() if time.clock()//1 == timepoint: sys.stdout.write(" 進(jìn)度:%d/%d"%(filenum,num)) timepoint += 1 wf.close() rf.close() filenum += 1 sys.stdout.write(" 進(jìn)度:%d/%d" % (num, num)) sPath = r"F:PycharmProjectsasic gram作業(yè)和習(xí)題Anaconda3" num = getFileNum(sPath) # print(num) start_time = time.clock() copyFile(sPath)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/41661.html
摘要:類遍歷文件夾目錄功能返回一個(gè)數(shù)組,表示該目錄中的所有子文件或目錄。遍歷構(gòu)造方法中給出的目錄會(huì)獲取目錄中所有文件文件夾的名稱把獲取到的多個(gè)名稱存儲(chǔ)到一個(gè)類型的數(shù)組中這個(gè)遍歷出來的顯示文件夾或者文件的路徑 package com.itheima.demo01.File; import java.io.File; /* File類遍歷(文件夾)目錄功能 - public String...
摘要:阿里聚安全的應(yīng)用漏洞掃描服務(wù),可以檢測出應(yīng)用的文件目錄遍歷風(fēng)險(xiǎn)。阿里聚安全對開發(fā)者建議對重要的壓縮包文件進(jìn)行數(shù)字簽名校驗(yàn),校驗(yàn)通過才進(jìn)行解壓。 1、ZIP文件目錄遍歷簡介 因?yàn)閆IP壓縮包文件中允許存在../的字符串,攻擊者可以利用多個(gè)../在解壓時(shí)改變ZIP包中某個(gè)文件的存放位置,覆蓋掉應(yīng)用原有的文件。如果被覆蓋掉的文件是動(dòng)態(tài)鏈接so、dex或者odex文件,輕則產(chǎn)生本地拒絕服務(wù)漏洞...
摘要:技術(shù)概述技術(shù)概述把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到持久化設(shè)備上這個(gè)動(dòng)作稱為輸出寫操作把持久設(shè)備上的數(shù)據(jù)讀取到內(nèi)存中的這個(gè)動(dòng)作稱為輸入讀操作操作把上面的這種輸入和輸出動(dòng)作稱為操作類的概述和作用類的概述和作用的概念類是文件和目錄路徑名的抽象表示形式中把文件或 01IO技術(shù)概述.avi(02:49) * A:IO技術(shù)概述 * a: Output * 把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到持久化設(shè)備上...
摘要:刪除刪除只能刪除文件,若為目錄則報(bào)錯(cuò)若文件正在使用,下會(huì)直接報(bào)錯(cuò),下會(huì)在目錄表中刪除記錄,但文件還在與一樣的作用刪除目錄,目錄必須為空,否則報(bào)錯(cuò)遞歸刪除空目錄刪除整個(gè)目錄不管此目錄下有多少目錄和文件新建新建新建文件夾,若倒數(shù)第二層文件夾不存 刪除 # ==================刪除================== # 只能刪除文件,若為目錄則報(bào)錯(cuò) # 若文件正在使用,Wi...
摘要:練習(xí)遞歸打印多級目錄需求遍歷文件夾及文件夾的子文件夾定義一個(gè)方法參數(shù)傳遞類型的目錄方法中對目錄進(jìn)行遍歷打印被遍歷的目錄名稱對遍歷得到的對象進(jìn)行判斷判斷是否是文件夾是一個(gè)文件夾則繼續(xù)遍歷這個(gè)文件夾我們發(fā)現(xiàn)方法就是傳遞文件夾遍歷文件夾的方法所以 package com.itheima.demo02.Recursion; import java.io.File; /* 練習(xí): 遞歸打...
閱讀 3217·2021-09-22 15:52
閱讀 2987·2019-08-30 15:55
閱讀 2780·2019-08-30 15:53
閱讀 2602·2019-08-30 13:21
閱讀 1804·2019-08-30 13:10
閱讀 2568·2019-08-26 12:09
閱讀 2651·2019-08-26 10:33
閱讀 1906·2019-08-23 18:06