0

我正在开发一个工具,可以根据几个条件删除网络路径上的文件。我想从检查中排除某些路径,并且无法找到合适的方法。

程序处理的一些路径如下:

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:pass@server/E/Downloads/Path/to/Folder"

如您所见,一些路径使用凭据,而其他路径则不使用。这些网络路径应该能够相互匹配。

简而言之,我想确认File.ext使用任何协议,它是Folder(我排除在检查之外)的一部分。由于我不是路径操作或正则表达式方面的专家,因此我陷入了困境。我尝试了下面的正则表达式,它对于 NFS 路径失败,因为它也采用共享名称 ( E)。UPnP 路径完全失败,因为它们的性质完全不同。

"(?P<protocol>((smb|nfs|afp|upnp)://((.+:.+@)?.+?/)?))?(?P<directory>.+)"

我也尝试使用该os.path模块,但方法似乎不合适。

在等待更有效的答案时,我构建了一个正确解析正则表达式,它只会捕获文件夹结构并忽略前缀:

"(?:smb|afp|nfs|upnp)://(?:(?:.+):(?:.+)@)?(?:.+?)/(?P<tail>.*)$"

谁能指出我更有效的方法?我认为这将太消耗内存而无法测试许多不同的文件。

它需要在 python 2.6 或更低版本上运行,因为它是现有程序的插件。

4

1 回答 1

0

如果您的网络和本地目录相同,您可以使用 os.walk(local) 通过简单地更改驱动器来获取网络目录。

import os
networkdir = "Z:\\"
localdir = "C:\\"

for dirs,subdirs,files in os.walk(localdir):
    if os.path.join(localdir,dirs) == excluded:
        continue
    for filename in files:
        localfile = os.path.join(localdir,dirs,filename)
        networkfile = os.path.join(networkdir,dirs,filename)

要检查文件是否在被排除的文件夹中:

 excludedpath = "C:\excluded\"
 filename = "file.ext"
 os.path.exists(os.path.join(excludedpath,filename))
于 2013-07-29T13:20:47.960 回答