teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

ちょっと追記

2016/03/31 02:15

投稿

sharow
sharow

スコア1151

answer CHANGED
@@ -20,8 +20,10 @@
20
20
 
21
21
  > pathlib.WindowsPath('servername') には、引っ掛からないです。
22
22
 
23
- Microsoftネットワークに対応したパス指定を`UNCパス`といいます。これはMicrosoftの固有名詞です。外部サーバなど指定するUNCパスの記法して、'\\servername\'のように先頭に'\\'が必要です(Windowsでは¥マークになるでしょう)。そうでなければ、現在のワーキングディレクトリ以下でservernameを探してしまいます。
23
+ Microsoftネットワークに対応したパス指定を`UNCパス`といいますMicrosoftの固有名詞ですpathlibお勧めしたのはUNCパスをちゃん扱えからです。
24
24
 
25
+ 外部サーバなどを指定するUNCパスの記法として、'\\servername\'のように先頭に'\\'が必要です(Windowsでは¥マークになるでしょう)。そうでなければ、現在のワーキングディレクトリ以下でservernameを探してしまいます。
26
+
25
27
  ところでPythonを含む多くの言語では`\`から始まる文字はエスケープ文字といわれ、例えば`\n`は改行文字になるのはご存知だと思います。`\\`(バックスラッシュ二つ)は一つの`\`の文字と解釈されますから、'\\servername'という文字列を作るには'\\\\servername'のようにバックスラッシュ(あるいは¥)が4つ必要です。Pythonではr'\'のような記法でエスケープ文字を抑止できますから、これの使い時でしょう。
26
28
 
27
29
  私の環境では以下のコードでローカルPCのUsers以下のものが列挙されます。

2

追記

2016/03/31 02:15

投稿

sharow
sharow

スコア1151

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  ```python
4
4
  import pathlib
5
5
 
6
- share = pathlib.WindowsPath(r'//servername/')
6
+ share = pathlib.WindowsPath(r'\\servername\')
7
7
 
8
8
  if share.exists():
9
9
  print("指定のファイルもしくはディレクトリが存在しています。")
@@ -13,4 +13,23 @@
13
13
  ```
14
14
 
15
15
 
16
- [http://docs.python.jp/3/library/pathlib.html](http://docs.python.jp/3/library/pathlib.html)
16
+ [http://docs.python.jp/3/library/pathlib.html](http://docs.python.jp/3/library/pathlib.html)
17
+
18
+ ----
19
+ 追記&パスに誤りがあったので修正しました
20
+
21
+ > pathlib.WindowsPath('servername') には、引っ掛からないです。
22
+
23
+ Microsoftネットワークに対応したパス指定を`UNCパス`といいます。これはMicrosoftの固有名詞です。外部サーバなどを指定するUNCパスの記法として、'\\servername\'のように先頭に'\\'が必要です(Windowsでは¥マークになるでしょう)。そうでなければ、現在のワーキングディレクトリ以下でservernameを探してしまいます。
24
+
25
+ ところでPythonを含む多くの言語では`\`から始まる文字はエスケープ文字といわれ、例えば`\n`は改行文字になるのはご存知だと思います。`\\`(バックスラッシュ二つ)は一つの`\`の文字と解釈されますから、'\\servername'という文字列を作るには'\\\\servername'のようにバックスラッシュ(あるいは¥)が4つ必要です。Pythonではr'\'のような記法でエスケープ文字を抑止できますから、これの使い時でしょう。
26
+
27
+ 私の環境では以下のコードでローカルPCのUsers以下のものが列挙されます。
28
+
29
+ ```
30
+ print(list(pathlib.WindowsPath(r'\\localhost\Users').glob('*')))
31
+ ```
32
+ Windowsネットワークは使っていないので、外部サーバの指定は試していません。PythonがUNCパスを解釈して正しくアクセスできてると確認できれば、問題の半分は解決したと考えてよいでしょう。
33
+
34
+
35
+ リンクについては、単にリンクを使わなければよいと思います。

1

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

2016/03/31 02:07

投稿

sharow
sharow

スコア1151

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  ```python
4
4
  import pathlib
5
5
 
6
- share = pathlib.WindowsPath('//servername/')
6
+ share = pathlib.WindowsPath(r'//servername/')
7
7
 
8
8
  if share.exists():
9
9
  print("指定のファイルもしくはディレクトリが存在しています。")