使用Python來比較資料夾並提取差異部分
下面的指令碼可以在Python24裡很好地執行,在其他版本里沒有,但用的都是基本功能,應該沒有什麼問題。
程式碼裡的PathA是全的資料的資料夾,PathB是不全的資料的資料夾,PathC是個新的空目錄,指令碼執行完後就把PathA中有且pathB中沒有的檔案和目錄都寫到PathC裡了,還可以保持原來的目錄結構,速度和正確性都很令人滿意。
因為是急用的程式碼,所以寫得不很簡潔,也不是很規範,在此留志,一方面供自己以後參考,另一方面也提供給需要使用Python進行檔案和目錄操作的兄弟們共同參考。
# coding: GB2312
#系統模組
import sys
import os
import shutil
#用於檔案查詢的模組
from os.path import walk, join, normpath
#這個是完整的資料夾
PathA = "F:FullData"
#這個是缺檔案的資料夾
PathB = "F:IncomplData"
#這個是目標資料夾
PathC = "F:DiffData"
#============================================================
#這個函式是用來遞迴處理PathA,對PathA裡的每個檔案和資料夾在PathB中找是否有對應的檔案或資料夾
#若找不到,則在PathC中建立目錄並複製檔案
#複製檔案時使用了shutil模組的copy2函式,以保留檔案原來的建立時間和最後更新時間
def visit(arg, dirname, names):
#把目錄列印出來,以監視進度
print dirname
#得到路徑名後,把前面的主路徑名去掉
dir=dirname.replace(PathA,"")
dirnameB = os.path.join(PathB,dir)
dirnameC = os.path.join(PathC,dir)
if os.path.isdir(dirnameB):
#若PathB裡存在對應的資料夾,再逐個檔案判斷是否存在
for file in names:
if os.path.isfile(os.path.join(dirname,file)) and not os.path.isfile(os.path.join(dirnameB,file)):
if not os.path.isdir(dirnameC):
os.system("mkdir %s"%(dirnameC))
shutil.copy2(os.path.join(dirname,file), os.path.join(dirnameC,file))
elif os.path.isdir(os.path.join(dirname,file)) and not os.path.isdir(os.path.join(dirnameB,file)):
if not os.path.isdir(os.path.join(dirnameC,file)):
os.system("mkdir %s"%(os.path.join(dirnameC,file)))
else:
#若pathB裡不存在對應的資料夾,則在pathC裡建立對應的資料夾並複製檔案
if not os.path.isdir(dirnameC):
os.system("mkdir %s"%(dirnameC))
for file in names:
shutil.copy2(os.path.join(dirname,file), os.path.join(dirnameC,file))
#============================================================
if __name__=="__main__":
#這一行程式碼呼叫前面的visit函式,進行檔案查詢並遞迴處理
walk(PathA, visit, 0)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9697/viewspace-1011813/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 核對不同資料夾所含內容的差異並提取缺失內容:Python程式碼Python
- Python內建庫實現文字比較並返回差異位置座標Python
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- HHDESK資料夾比較功能
- 使用Visual Studio進行檔案差異比較
- pandas比較兩個文件的差異
- Javers 比較兩個類的差異
- 批次提取畫素差異並儲存二進位制
- openGauss資料與PostgreSQL的差異對比SQL
- difflib: Python 比較資料集Python
- 【Python】Python 對比 C語言的差異PythonC語言
- 集合差異比較演算法及效能測試演算法
- 在Linux中,如何比較兩個檔案差異?Linux
- list對比差異
- 批量提取資料夾內檔名
- VisualDiffer for Mac(資料夾和檔案比較工具)v1.8.4Mac
- 使用selenium定位獲取標籤物件並提取資料物件
- Git差異並列顯示Git
- 2023版:深度比較幾種.NET Excel匯出庫的效能差異Excel
- python 兩個資料夾裡的檔名對比Python
- Naarak Studio DirEqual for Mac(資料夾比較工具) v3.2啟用版Mac
- 在 Linux 中用 Meld以圖形方式比較檔案和資料夾Linux
- 文字內容差異對比
- 主流資料庫比較資料庫
- 圖資料庫比較資料庫
- 比較2018年的Angular和React 2018 - 沒有人告訴你的差異AngularReact
- SAP BSP應用有狀態和無狀態行為差異比較
- SAP Spartacus B2B OrgUnit 和 OrgUser 的路由對映差異比較路由
- git檢出專案部分資料夾Git
- 使用Python進行Web爬取和資料提取PythonWeb
- java 如何從零實現一個資料庫差異對比工具?Java資料庫
- Mac資料夾快速比較工具:DirEqualMac
- DirEqual for Mac(快速比較資料夾工具)Mac
- python的應用 | 提取指定資料夾下所有PDF檔案的頁數Python
- 中美慈善基金會差異對比
- data (){..} 返回一個物件或者不返回物件,兩種寫法的差異比較物件
- 使用NLP和ML來提取和構造Web資料Web
- 使用事務碼 SAT 比較 SELECT SQL 語句和 OPEN / FETCH CURSOR 分塊讀取的效能差異SQL