我正在开发一个工具,可以根据多种条件删除网络路径上的文件。我想排除某些被检查的路径,并且无法找到合适的方法。无论网络协议如何匹配文件路径
一些路径的程序处理是为如下:
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上,所以我无法测试它。 –