以下を使用して、接続されているすべてのドライブのリストを取得するとします。
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]
接続されたドライブのUNCパスを取得するにはどうすればよいですか?
os.path
は、z:\
の代わりに\share\that\was\mapped\to\z
を返すだけです。
ドライブ文字を変換するには、pywin32の win32wnet を使用します。例えば:
import win32wnet
import sys
print(win32wnet.WNetGetUniversalName(sys.argv[1], 1))
これを実行すると、次のようなものが得られます。
C:\test>python get_unc.py i:\some\path
\\machine\test_share\some\path
ctypes
と、この投稿の最初の回答に示されているコードを使用して: Pythonのネットワークドライブ文字から完全なコンピューター名を取得 、すべてのネットワークドライブのドライブパスを取得することができます、または選択したいくつか。
get_connection
指定された関数は、ドライブがローカルドライブまたはリムーバブルドライブのいずれかのネットワークドライブでない場合、エラーをスローします。これは、次のように説明できます。
# your drive list
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]
for drive in available_drives:
try:
# function from linked post
print(get_connection(drive))
except WindowsError: # thrown from local drives
print('{} is a local drive'.format(drive))
python≥3.4、依存関係なしでそれを行う方法は次のとおりです!*
from pathlib import Path
def unc_drive(file_path):
return str(Path(file_path).resolve())
*注:このメソッドが失敗する状況を見つけました。私の会社のネットワーク共有の1つには、このメソッドがPermissionError
を発生させるように権限が設定されています。この場合、 win32wnet.WNetGetUniversalName
は適切なフォールバックです。