ディレクトリへのパスと、そのディレクトリに含まれるファイルへのパス(おそらくネストされた多数のディレクトリが深い)を受け取るスクリプトを作成し、このファイルへのパスを外部ディレクトリに対して返します。外側のディレクトリが/home/hugomg/foo
あり、内側のファイルが/home/hugomg/foo/bar/baz/unicorns.txt
ある場合Pythonでファイル名からプレフィックスを削除するにはどうしたらいいですか?
は例えば、私は、出力bar/baz/unicorns.txt
にスクリプトをしたいと思います。
import os
dir_path = "/home/hugomg/foo"
file_path = "/home/hugomg/foo/bar/baz/unicorns.py"
dir_path = os.path.realpath(dir_path)
file_path = os.path.realpath(file_path)
if not file_path.startswith(dir_path):
print("file is not inside the directory")
exit(1)
output = file_path[len(dir_path):]
output = output.lstrip("/")
print(output)
をしかし、これを行うには、より堅牢な方法があります:
今私はrealpath
と文字列操作を使用して、それをやっていますか?私は現在のソリューションがこれを行う正しい方法であるとは確信していません。 startswithをrealpathと一緒に使用して、あるファイルが別のファイル内にあることをテストする正しい方法はありますか?そして、私が取り除く必要がある大胆なスラッシュで、その厄介な状況を避ける方法はありますか?
これもオフに感じている... lstripはない削除する接頭辞として、削除する文字の集合としてのパラメータを扱います。 'dir_path'と' file_path'が正規化されていない、絶対パス名でもこれが機能しますか? – hugomg
おそらく 'relpath'がより適していますか? – abccd
[この質問](http://stackoverflow.com/questions/7287996/python-get-relative-path-from-comparing-two-absolute-paths/7288019#7288019)は私が求めていたものに近いです。ところで、そこにいる誰かがcommonprefixがcommonpath関数のために推奨されていないことを明らかに指摘しました。 – hugomg