回答編集履歴

3

ちょっと追記

2016/03/31 02:15

投稿

sharow
sharow

スコア1151

test CHANGED
@@ -42,7 +42,11 @@
42
42
 
43
43
 
44
44
 
45
+ Microsoftネットワークに対応したパス指定を`UNCパス`といいます(Microsoftの固有名詞です)。pathlibをお勧めしたのはUNCパスをちゃんと扱えるからです。
46
+
47
+
48
+
45
- Microsoftネットワークに対応したパス指定を`UNCパス`といいます。これはMicrosoftの固有名詞です。外部サーバなどを指定するUNCパスの記法として、'\\servername\'のように先頭に'\\'が必要です(Windowsでは¥マークになるでしょう)。そうでなければ、現在のワーキングディレクトリ以下でservernameを探してしまいます。
49
+ 外部サーバなどを指定するUNCパスの記法として、'\\servername\'のように先頭に'\\'が必要です(Windowsでは¥マークになるでしょう)。そうでなければ、現在のワーキングディレクトリ以下でservernameを探してしまいます。
46
50
 
47
51
 
48
52
 

2

追記

2016/03/31 02:15

投稿

sharow
sharow

スコア1151

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- share = pathlib.WindowsPath(r'//servername/')
11
+ share = pathlib.WindowsPath(r'\\servername\')
12
12
 
13
13
 
14
14
 
@@ -29,3 +29,41 @@
29
29
 
30
30
 
31
31
  [http://docs.python.jp/3/library/pathlib.html](http://docs.python.jp/3/library/pathlib.html)
32
+
33
+
34
+
35
+ ----
36
+
37
+ 追記&パスに誤りがあったので修正しました
38
+
39
+
40
+
41
+ > pathlib.WindowsPath('servername') には、引っ掛からないです。
42
+
43
+
44
+
45
+ Microsoftネットワークに対応したパス指定を`UNCパス`といいます。これはMicrosoftの固有名詞です。外部サーバなどを指定するUNCパスの記法として、'\\servername\'のように先頭に'\\'が必要です(Windowsでは¥マークになるでしょう)。そうでなければ、現在のワーキングディレクトリ以下でservernameを探してしまいます。
46
+
47
+
48
+
49
+ ところでPythonを含む多くの言語では`\`から始まる文字はエスケープ文字といわれ、例えば`\n`は改行文字になるのはご存知だと思います。`\\`(バックスラッシュ二つ)は一つの`\`の文字と解釈されますから、'\\servername'という文字列を作るには'\\\\servername'のようにバックスラッシュ(あるいは¥)が4つ必要です。Pythonではr'\'のような記法でエスケープ文字を抑止できますから、これの使い時でしょう。
50
+
51
+
52
+
53
+ 私の環境では以下のコードでローカルPCのUsers以下のものが列挙されます。
54
+
55
+
56
+
57
+ ```
58
+
59
+ print(list(pathlib.WindowsPath(r'\\localhost\Users').glob('*')))
60
+
61
+ ```
62
+
63
+ Windowsネットワークは使っていないので、外部サーバの指定は試していません。PythonがUNCパスを解釈して正しくアクセスできてると確認できれば、問題の半分は解決したと考えてよいでしょう。
64
+
65
+
66
+
67
+
68
+
69
+ リンクについては、単にリンクを使わなければよいと思います。

1

パスを非エスケープリテラルに変更

2016/03/31 02:07

投稿

sharow
sharow

スコア1151

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- share = pathlib.WindowsPath('//servername/')
11
+ share = pathlib.WindowsPath(r'//servername/')
12
12
 
13
13
 
14
14