我正在開發一個工具,可以根據多種條件刪除網絡路徑上的文件。我想排除某些被檢查的路徑,並且無法找到合適的方法。無論網絡協議如何匹配文件路徑
一些路徑的程序處理是爲如下:
nfs_path = "nfs://Sharepoint/Path/to/Folder/File.ext"
smb_path = "smb://SERVER/Sharepoint/Path/to/Folder/File.ext"
afp_path = "afp://server/Sharepoint/Path/to/Folder/File.ext"
upnp_path = "upnp://277b787b-5b27-b46f-1687-91100ada8d1f/Path/to/Folder/File.ext"
exclusion = "smb://user:[email protected]/E/Downloads/Path/to/Folder"
正如你可以看到一些路徑的使用憑證,而有的則沒有。這些網絡路徑應該能夠彼此匹配。
總之,我想得到確認File.ext
,使用任何協議,是Folder
(我排除了檢查)的一部分。由於我不是具有路徑操作或正則表達式的專家,因此我處於困境中。我嘗試了下面的正則表達式,這對於NFS路徑來說是失敗的,因爲它也需要共享名稱(E
)。 UPnP路徑完全失敗,因爲它們的性質完全不同。
"(?P<protocol>((smb|nfs|afp|upnp)://((.+:[email protected])?.+?/)?))?(?P<directory>.+)"
我也嘗試過使用os.path
模塊,但這些方法似乎並不合適。
在等待一個答案是比較有效的,我建了一個正確的解析正則表達式,將只捕獲文件夾結構,而忽略了前綴:
"(?:smb|afp|nfs|upnp)://(?:(?:.+):(?:.+)@)?(?:.+?)/(?P<tail>.*)$"
任何人都可以點我的更高效的方向進場?我認爲這會耗費太多的內存來測試很多不同的文件。
它需要在python 2.6或更低版本上工作,因爲它是一個現有程序的插件。
爲什麼你挑出NFS作爲取共享名稱時,SMB甚至本地路徑還包括「E」?它總是有E嗎?你可以拆分第一個'E',並將其餘的字符串作爲路徑,在開始時剝離可選的':'來解釋local_path? –
只有當我使用NFS作爲正則表達式的輸入時,它是否也會使用'E'。我提到的所有其他路徑都工作正常,因爲正則表達式假定服務器名稱,NFS不使用。 共享名稱與文件名稱不同。用戶選擇要從檢查中排除的路徑。如果該路徑上有文件,則不應刪除它們。 –
你見過'os.path.splitunc'嗎?我不在Windows上,所以我無法測試它。 –