2008-09-09 15 views
455

"mydir/myfile.txt"のようなパスを指定すると、Pythonの現在の作業ディレクトリに対する絶対パスをどのように見つけることができますか?例えば。 Windows上で、私は終わるかもしれない:それはすでに絶対パスである場合Pythonで絶対ファイルパスを取得する方法

"C:/example/cwd/mydir/myfile.txt" 
+0

同様の質問:https://stackoverflow.com/questions/7165相対パスでファイル内の相対パスで開くファイル – Raj

答えて

641
>>> 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' 
+16

注:ほとんどのプラットフォームでは、これは次のように 'normpath()'関数を呼び出すのと同じです: 'normpath(join(os.getcwd()、パス)) '。したがって、 'mydir/myfile.txt'が' os.getcwd() 'の下になければ、絶対パスは実際のパスではありません__です。 – coanor

+23

@coanor?明示的なルートがなければ、 'mydir/myfile.txt'は現在の作業ディレクトリ内のパスを暗黙的に参照します。したがって、'。/ mydir/myfile.txt'と同じです。それはあなたが入力しようとしている道ではないかもしれませんが、私が知る限りパスの正しい解釈のようです。あなたは詳しく説明できますか? – jpmc26

47
>>> import os 
>>> os.path.abspath('mydir/myfile.txt') 
'C:\\example\\cwd\\mydir\\myfile.txt' 
>>> 
21

まだよく、path.pyモジュールをインストールし、それはすべてのラップ文字列が使用されている場所で使用できるオブジェクト上のメソッドに関数とその他の関連関数を追加します。

>>> 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 
>>> 

が、私はそれがa clean interface to common os.path utilitiesを提供していますように、このパッケージを使用することをお勧めします:

+2

彼らはstdlibに適切なファイル名抽象化モジュールを手に入れていないのは残念です。 –

+1

@トルステン・マレク:それは辛くて長年にわたる省略です。 – flow

+4

彼らは今Python 3.4: 'pathlib'のためにしました。このスレッドで私の答えを見てください。 – twasbrillig

10

今日、あなたはまた、path.pyに基づいていたunipathパッケージを使用することができます。

42

新しいPython 3.4ライブラリpathlibを使用できます。 (pip install pathlibを使用してPython 2.6または2.7を入手することもできます)。著者wrote: "このライブラリの目的は、ファイルシステムのパスとそのユーザーが行う一般的な操作を処理するためのクラスの単純な階層を提供することです。

>>> from pathlib import Path 
>>> p = Path("pythonw.exe").resolve() 
>>> p 
WindowsPath('C:/Python27/pythonw.exe') 
>>> str(p) 
'C:\\Python27\\pythonw.exe' 

またはUNIX:

のWindowsでの絶対パスを取得するには

>>> 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

+3

非常に役に立ちます。 'os.path.abspath()'を使うと、 'AttributeError: 'NoneType'オブジェクトに属性 'startswith'がなく、' Path()。resolve() 'は同じ相対ファイルパスではありません。 (LinuxとPython3.4) – NuclearPeon

3

は、私がここにグロブ

を使用することを好むています現在のフォルダにあるすべてのファイルタイプを一覧表示する方法:

01ここ
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) 

あなたのお役に立てば幸いです。

+0

あなたは別の質問に答えているようです。 「どのように道を得るのですか?」ではなく、「絶対的な道」です。 'glob'があなたの最初の2つの場合に提供する相対的なパスに正しい答え(' os.path.abspath() ')を適用することができます... – NichtJens

-2
filePath = os.path.abspath(directoryName) 
filePathWithSlash = filePath + "\\" 
filenameWithPath = os.path.join(filePathWithSlash, filename) 
+0

質問は画像の名前を変更する方法ではありません。あなたの5番目の行 'filePath = os.path ... 'のためだけに尋ねられました – derM

+0

derMはい、あなたが正しいです、私はそれを投稿したときに何かを見ていました。私はこのページの質問に無関係なものを削除しました。 –

関連する問題