使用os庫遍歷資料夾,搜尋資料夾中的檔案,並把以檔案的修改時間作為判斷檔案是否複製搬移的依據。
os.walk(filepath)可以獲取資料夾下面的
topdown--可選,為 true,則優先遍歷 top 目錄,否則優先遍歷 top 的子目錄(預設為開啟)。如果 topdown 引數為 true,walk 會遍歷top資料夾,與top 資料夾中每乙個子目錄。
onerror-- 可選,需要乙個 callable 物件,當 walk 需要異常時,會呼叫。
followlinks-- 可選,如果為 true,則會遍歷目錄下的快捷方式(linux 下是軟連線 symbolic link )實際所指的目錄(預設關閉),如果為 false,則優先遍歷 top 的子目錄
現有需求如下,檔案的重複的標準已檔案的修改時間為準,對檔案進行遷移操作,如上傳資料夾下修改時間大於今天的檔案。且把檔案遷移動相應資料夾下並建立好預先命名的檔案;
import os
import re
from dateutil.parser import parse
import shutil
from threading import thread
dic =
base_dir = r'c:\測試'
target_dir = r'c:\搬移'
start_datetime = parse('2020/04/14') #開始時間
for root,dirs,files in os.walk(base_dir):
# if datetime.datetime(*time.localtime(os.path.getmtime(os.path.join(root)))[0:7])>=start_datetime:
for file in files:
# print(root)
if datetime.datetime(*time.localtime(os.path.getmtime(os.path.join(root,file)))[0:7])>=start_datetime:
bu = re.findall('|'.join(dic.keys()),root.replace(base_dir,target_dir))
makefilepath = root.replace(base_dir,target_dir).replace(bu[0],dic[bu[0]]) if bu != else root.replace(base_dir,target_dir)
if not os.path.exists(makefilepath):
os.makedirs(makefilepath)
shutil.copy(os.path.join(root,file),makefilepath)
print(file)
# print(dirs)
os.makedirs會遞迴建立資料夾。
dic:主要用於路徑上的檔名的轉換。
同時增設多執行緒檢查相應資料夾下的日期。加快速度。
import os
import re
import datetime
import time
from dateutil.parser import parse
import shutil
def search_file_from_dms(base_dir,target_dir,start_datetime):
dic =
base_dir1 = r'c:\測試'
print("thread start!")
start_datetime = parse(start_datetime) #開始時間
for root,dirs,files in os.walk(base_dir):
for file in files:
if datetime.datetime(*time.localtime(os.path.getmtime(os.path.join(root,file)))[0:7])>=start_datetime:
bu = re.findall('|'.join(dic.keys()),root.replace(base_dir1,target_dir))
makefilepath = root.replace(base_dir1,target_dir).replace(bu[0],dic[bu[0]]) if bu != else root.replace(base_dir1,target_dir)
if not os.path.exists(makefilepath):
os.makedirs(makefilepath)
shutil.copy(os.path.join(root,file),makefilepath)
print("thread end!")
from threading import thread
base_dir = r'd:\測試'
target_dir = r'c:\測試'
start_datetime = '2020/04/14'
files = os.listdir(base_dir)
n = 4
threads =
for f in files:
t = thread(target=search_file_from_dms,args=(os.path.join(base_dir,f),target_dir,start_datetime))
t.start()
for i in threads:
i.join()
print("all thread end!")
python OS庫 實現遍歷資料夾
python語言因簡單易學,已成為目前相對較火的程式語言,更有 人生苦短,我學python 這麼一說。今天我門就用python寫乙個遍歷電腦資料夾的程式,程式相對較為簡單小白也可以操作。os庫設計思路 實現 python版本 python 3.7 開發工具 jetbrains pycharm 201...
遍歷資料夾
function search path string filename string ball boolean false string varsearchrec tsearchrec begin if findfirst path faanyfile,searchrec 0 then begin...
資料夾遍歷
c 遍歷指定資料夾中的所有檔案 directoryinfo thefolder new directoryinfo folderfullname 遍歷一層資料夾 foreach directoryinfo nextfolder in thefolder.getdirectories 遍歷多層資料夾 ...