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(チェックから除外した)の一部であることを確認したいと思います。私はパス操作や正規表現の専門家ではないので、困っています。以下の正規表現を試してみましたが、共有名 ( E) も取るため、NFS パスでは失敗します。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 に答える