回答:
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
それがすでに絶対パスである場合にも機能します:
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
normpath()次のように関数を呼び出すことと同じですnormpath(join(os.getcwd(), path))。したがって、mydir/myfile.txt下os.getcwd()にない場合、絶対パスは実際のパスではありません。
mydir/myfile.txtは現在の作業ディレクトリ内のパスを暗黙的に参照するため、と同等./mydir/myfile.txtです。入力したパスではないかもしれませんが、私が知る限り、パスは正しく解釈されているようです。詳しく説明してもらえますか?
abspath関数の引数と実際のファイルの間にリンクはないと言っています。パス名を指定することができます。存在しないファイルとディレクトリ階層は問題なく、abspathはパスのビット(親ディレクトリ " .."要素を含む)を解決して文字列を返します。これは、現在のディレクトリから計算された文字列です。実際のファイルとの相関関係は偶然のようです。お試しくださいos.path.abspath("/wow/junk/../blha/hooey")。できます。
os.path.exists。逆に、PowerShellのような、標準のパス解決機能を使用して既存のパスを要求するシステムは、使いにくいものです。
relpath、「ファイルシステムにアクセスして、その存在または性質を確認することはできません」と明言していますpath。ここでの議論が明白である場合、なぜ明示的なのrelpathですか?
新しいPython 3.4ライブラリを使用できますpathlib。(Python 2.6または2.7を使用して取得することもできpip install pathlibます。)著者は次のように書いています。
Windowsで絶対パスを取得するには:
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
またはUNIXの場合:
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
ドキュメントはこちら:https : //docs.python.org/3/library/pathlib.html
os.path.abspath()するとエラーが発生しました:AttributeError: 'NoneType' object has no attribute 'startswith'を使用するPath().resolve()と、同じ相対ファイルパスが使用されません。(LinuxおよびPython3.4)
さらに良いことに、モジュール(にあります)をインストールすると、PyPIすべてのos.path関数とその他の関連関数が、文字列が使用される場所で使用できるオブジェクトのメソッドにラップされます。
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
pathlib。このスレッドで私の答えを参照してください。
from path import Path、その後Path('mydir/myfile.txt').abspath()
path。別のモジュールを使用している可能性があります。リンクされたモジュールは、という名前のクラスを使用しますpath。
今日、以下unipathに基づいたパッケージを使用することもできますpath.py:http : //sluggo.scrapping.cc/python/unipath/
>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>
一般的なos.pathユーティリティへのクリーンなインターフェイスを提供するため、このパッケージの使用をお勧めします。
pathlib実際に質問に答えるPython 3.4以降の更新:
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
一時的な文字列のみが必要な場合は、もちろんを含む、のPathすべての関連機能を持つオブジェクトを使用できることに注意してください。os.pathabspath
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
これは、別のスクリプト内から呼び出された場合でも、常に現在のスクリプトの正しいファイル名を取得します。を使用する場合に特に便利ですsubprocess。
import sys,os
filename = sys.argv[0]
そこから、次のようにしてスクリプトの完全なパスを取得できます。
>>> os.path.abspath(filename)
'/foo/bar/script.py'
また、追加するだけでフォルダをナビゲートしやすくなります /..、ディレクトリの階層を「上に」行きたい回数ます。
cwdを取得するには:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
親パスの場合:
>>> os.path.abspath(filename+"/../..")
'/foo'
"/.."他のファイル名と組み合わせると、システム内の任意のファイルにアクセスできます。
モジュールosはabsパスを見つける方法を提供します。
しかし、Linuxのほとんどのパスは~(チルダ)で、満足のいく結果が得られません。
そのために使用できますsrblib。
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
使用してインストール python3 -m pip install srblib
私はグロブを使いたい
現在のフォルダ内のすべてのファイルタイプを一覧表示する方法は次のとおりです。
import glob
for x in glob.glob():
print(x)
現在のフォルダにあるすべての(たとえば).txtファイルを一覧表示する方法は次のとおりです。
import glob
for x in glob.glob('*.txt'):
print(x)
選択したディレクトリ内のすべてのファイルタイプを一覧表示する方法は次のとおりです。
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
これがお役に立てば幸いです
os.path.abspath()相対パスに正解()を適用できますglob...