1

ここでパスに参加する方法の何が問題になっていますか?

リストの最初の項目以外はすべて適切に結合されます。

tkinter のファイル ダイアログからパスを取得しています。

すなわち filedialog.askdirectory()

パスの例:

PATH = "C:/MyUserName/Desktop/SomeDir"

私がやっていること:

os.path.join(*(PATH.split("/") + ["somefile.txt"]))

これにより、次のように出力されます。

C:MyUserName/Desktop/SomeDir/somefile.txt

最初の を失うのはなぜ/ですか?

4

3 に答える 3

3

os.normpathtkinter から filedialog 入力を取得し、問題の上記のパス スタイル / コードを使用してファイルにアクセス / 作成しようとして、最初のパスを変換する必要がありました。

Windows の不適切な結合/区切り記号が原因で、エラーが発生していました。

于 2016-03-10T06:22:15.187 に答える
2

あなたはWindowsを使用していますよね?

ドキュメントから:

Windows では、絶対パス コンポーネント (例: r'\foo') が検出された場合、ドライブ文字はリセットされません。コンポーネントにドライブ文字が含まれている場合、以前のすべてのコンポーネントが破棄され、ドライブ文字がリセットされます。ドライブごとに現在のディレクトリがあるため、 os.path.join("c:", "foo") は c:\foo ではなく、ドライブ C: (c:foo) の現在のディレクトリからの相対パスを表すことに注意してください。 .

これは、c:foo が実際には正しいパスであることを意味します。試してみてos.path.abspath('c:foo')os.path.abspath('c:\\foo')違いを確認してください。最初のパスは c ドライブの相対パスで、2 番目のパスは絶対パスです。

于 2016-03-10T06:24:59.403 に答える
2

Windows は、すべてのドライブの現在のパスを保持します。C:MyUserName/Desktop/SomeDir/somefile.txtC:/MyUserName/Desktop/SomeDir/somefile.txtは両方とも有効でありntpath.join、ドライブ相対パスとドライブ絶対パスのどちらが必要かを知る方法はありません。

于 2016-03-10T06:27:43.147 に答える