1

os.path.join() メソッドのオンライン ドキュメントを読んだ後、次のケースは適格であるように思われますが、明らかにそうではありません。そのドキュメントを正しく読んでいますか?

>>> import os
>>>
>>> os.path.join("/home/user", "/projects/pyproject", "mycode.py")
>>> '/projects/pyproject/mycode.py'

1 番目と 2 番目のパスで末尾と先頭の os.sep のさまざまな組み合わせを試した後、結合する 2 番目のパスの最初の文字を os.sep で開始することはできないようです。

>>> os.path.join("/home/user", "projects/pyproject", "mycode.py")
>>> '/home/user/projects/pyproject/mycode.py'

たとえば、path1 と path2 がユーザー入力の一部である場合、ユーザー入力とは、その先頭の os.sep の入力を解析するコードを記述することを意味します。

python.org オンライン リファレンスから:

os.path.join(path1[, path2[, ...]])1 つ以上のパス コンポーネントをインテリジェントに結合します。いずれかのコンポーネントが絶対パスである場合、以前のすべてのコンポーネント (Windows では、以前のドライブ文字があった場合はそれを含む) が破棄され、結合が続行されます。戻り値は、path1、およびオプションで などを連結したもので、最後の部分を除く空でない各部分の後にpath2ディレクトリ セパレータ ( ) が 1 つだけ続きます。os.sep(これは、最後の部分が空の場合、区切り記号で終わるパスになることを意味します。) Windows では、各ドライブに現在のディレクトリがあるため、 は、 ではなく、ドライブ( ) os.path.join("c:", "foo")上の現在のディレクトリに対する相対パスを表すことに注意してください。C:c:fooc:\foo

4

2 に答える 2

8

そのドキュメントを正しく読んでいますか?

もう一度読んでみてください。私のものを強調してください。

1 つ以上のパス コンポーネントをインテリジェントに結合します。いずれかのコンポーネントが絶対パスである場合、以前のすべてのコンポーネント(Windows では、以前のドライブ文字があった場合はそれを含む) は破棄され、結合が続行されます。戻り値は、最後の部分を除く各空でない部分の後に正確に 1 つのディレクトリ セパレータ (os.sep) を付けた、path1 およびオプションで path2 などの連結です。(これは、最後の部分が空の場合、区切り記号で終わるパスになることを意味します。) Windows では、各ドライブに現在のディレクトリがあるため、 os.path.join("c:", "foo") に注意してください。 c:\foo ではなく、ドライブ C: (c:foo) の現在のディレクトリからの相対パスを表します。

前のコンポーネントが「破棄される」と表示されている場合は、それらが無視され、最終結果に含まれないことを意味します。

于 2012-08-08T21:56:50.560 に答える
3

ドキュメントにあるとおりです。いずれかのコンポーネントが絶対である場合、以前のコンポーネントは破棄されます。パスが で始まる場合、/それは絶対パスです。絶対的なものではない場合は、で始まるべきではありません/

于 2012-08-08T21:56:52.310 に答える