你好 stackoverflow 社區!求助,已經腦洞大開怎么實作了。
例如,檔案夾:“D:\left”和“C:\right”。
它們包含以下內容:檔案、帶有檔案的目錄、子目錄、帶有檔案的子目錄。大部分內容是一樣的,但是'C:\right'中可能有'額外'的內容(與'D:\left'的內容不匹配)。
如何比較“С:\right”中的內容(內容),“D:\left”中沒有的內容,然后(“С:\right”中的額外內容)將其洗掉,以便檔案夾“D: \left' 和 'C:\right' 變得相同(在我們的例子中,我們不看大小、時間等 - 純粹看它們的內容名稱)。
嘗試這樣去除多余的:
difs = list(set(os.listdir('C:\right')) - set(os.listdir('D:\left')))
但這還不夠,因為它不會將效果傳播到子目錄。
也像這樣:
from dirsync import sync
sync('D:\left', 'C:\right', 'diff')
但是,我只對輸出的一小部分感興趣,而如何準確地洗掉這個輸出對我來說根本不清楚。
洗掉 'C:\right' 中的所有內容以從 0 復制到 'D:\left' 到 'C:\right' 不是解決方案。
我很確定解決方案固定在:
os.walk
但我就是不能正確排列:(
非常感謝您的任何幫助,我為愚蠢道歉。
為了清楚起見,我附上了螢屏截圖
入口: 入口 入口2
運行程式后想要的結果: Result Result2
uj5u.com熱心網友回復:
您可以使用Path.rglob:
from pathlib import Path
pl = Path(path/to/left)
pr = Path(path/to/right)
difference = (set(map(lambda p: p.relative_to(pr), pr.rglob('*'))) -
set(map(lambda p: p.relative_to(pl), pl.rglob('*'))))
這是一個例子:
right
file1
file5
dir1
file2
file6
dir2
file3
file7
subdir1
file4
file8
subdir2
file9
subdir3
left
file1
dir1
file2
dir2
file3
subdir1
file4
>>> difference
{PosixPath('dir1/file6'),
PosixPath('file5'),
PosixPath('dir2/subdir3'),
PosixPath('dir2/subdir2'),
PosixPath('dir2/subdir1/file8'),
PosixPath('dir2/subdir2/file9'),
PosixPath('dir2/file7')}
現在您只需要洗掉difference.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/441214.html
標籤:Python python-3.x 目录 子目录 错配
上一篇:洗掉具有給定條件的重復項并在python中回傳唯一的元組串列
下一篇:DartFluttercom.google.firebase:firebase-messaging:23.0.0錯誤
