2012-04-05 6 views
5

は、ファイルのパス「FILE1.TXT」は/home/bentley4/Desktop/sc/file1.txt が私の現在の作業ディレクトリが/home/bentley4os.path.abspath(「FILE1.TXT」)は

import os 
os.path.abspath('file1.txt') 

と言うと言う正しいパスを返しません。 /home/bentley4/file1.txt

os.path.exists('file1.txt') 

戻りFalseを返します。私は

os.path.abspath('file_that_does_not_exist.txt') 

を行う場合 それは/home/bentley4/file_that_does_not_exist.txt を返します。しかし、再び、これは正しくありません。ファイルは私のコンピュータにも存在しません。現在作業中のディレクトリから絶対パスを取得する方法はありますか?

これは、既存のファイルと同じディレクトリにあるか、ディレクトリ内の1つのディレクトリまたはそのディレクトリのパスからさらに離れている場合にのみ機能しますか?

+3

'os.path.abspath'だけで動作するはずです、非常に好奇心旺盛です。 'os.getcwd()'は何を返しますか? ...ああ、ちょっと待って、あなたが '/ home/bentley4'にいると言っていて、' os.path.abspath'が何らかの理由でファイルをそのサブディレクトリ?それはしません。 – torek

+0

あなたは何をしようとしていますか?現在の作業ディレクトリのサブディレクトリのいずれかで名前でファイルを検索しようとしていますか? –

答えて

11

os.path.abspath(filename)は、現在の作業ディレクトリから見た絶対パスを返します。ファイルが実際に存在するかどうかはチェックしません。

絶対パスが/home/bentley4/Desktop/sc/file1.txtで、/home/bentley4にある場合は、os.path.abspath("Desktop/sc/file1.txt")を使用する必要があります。

+2

さて、 'os.path.isabs()'をチェックすることから始めます。しかし、この場合、はい。 – torek

1

abspathはパスを作成するだけで、既存のファイルについては何もチェックしません。ドキュメントから

ほとんどのプラットフォームでは、これはnormpathと等価である(参加(os.getcwd()、path))と。

0

os.path.abspath(__file__)でパスを取得します。

+0

これは動作しません。 os.path.abspath( '__ file1.txt__')は、os.path.abspath( 'file1.txt')と同じように動作します。 – Bentley4

+3

@ Bentley4 os.path.abspath( 'file1.txt')は、Pythonが存続する限り、常にos.path.abspath( 'file1.txt')と同じように動作します。 – JSmyth

0

問題は、以前cwdが os.chdir(another_path)を使用して変更されていて、それが現在の実行のコンテキストでまだ読み込まれていることが必要です。 したがって、another_path内のタスクの使用が終了した後に、修正プログラムは元のパスを復元する必要があります。
例:

original_path = os.getcwd() 
    os.chdir(another_path) 
    # here perform some operation over another_path 
    os.chdir(original_path) # here is the restore of the original path 
関連する問題