我正在开发一种工具,可以根据几种情况删除网络路径上的文件。我想排除某些路径被检查,并且无法找到合适的方法。
程序处理的一些路径如下:
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或更低版本上运行,因为它是现有程序的插件。
答案 0 :(得分: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))