Pythonで開いているファイルからパスを取得する


113

ファイルを開いている場合os、完全なパスを文字列として取得する呼び出しはありますか?

f = open('/Users/Desktop/febROSTER2012.xls')

からf、どのように入手でき"/Users/Desktop/febROSTER2012.xls"ますか?

回答:


145

ここで重要なのは、開かれたファイルを表すオブジェクトのname属性fです。あなたはそれをそのように得る:

>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> f.name
'/Users/Desktop/febROSTER2012.xls'

それは役に立ちますか?


4
で作成されたファイルの場合:tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')機能しません!
ビクター

19
@Victor:あなたが言及したドキュメントのすぐ下にあるtempfile、特にのモジュールのドキュメントをお読みください。これは一時ファイルの特定のケースであり、ドキュメントに見られるように、すでに既存の解決策があります。名前を読みたい場合に使用するためのものではありません。tempfile.NamedTemporaryFiletempfile.TemporaryFiletempfile.TemporaryFile
Tadeck

12
open( 'foo.txt'、 'w')を使用してファイルを作成してからf.nameを実行すると、出力foo.txtのみが提供されます
searchengine27

Zansは、相対パスでも機能するソリューションを提供します。以下の彼の答えを見てください。
マーカス2016

名前が必要な場合に備えて、tempfile.NamedTemporaryFileがあります。
アポロデータ

96

私はまったく同じ問題を抱えていました。相対パスを使用している場合、os.path.dirname(path)は相対パスのみを返します。os.path.realpathはトリックを行います:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)

15
これが実際の答えです。
BlueTrin 2017年

1
これは、相対ファイルパスがまだ正しいファイルパスである場合にのみ機能します。ファイル名をディレクトリ '〜/ Documents /'から 'text.txt'として指定し、ディレクトリを '〜/'に変更os.path.realpathすると、 '〜/ Documents / text.txt'ではなく '〜/ text.txt'が返されます。
K.ニールソン

1
realpathに問題があることに気づきました。ファイルのアルファベット文字の大文字と小文字は修正されませんが、openステートメントで使用されている大文字と小文字が保持されます。ファイルシステムに実際に存在するファイル名が返されることを期待していました。(もちろん、これはWindowsです)
RufusVS '17年

12

また、ディレクトリ名を取得するだけで、ファイル名が必要ない場合は、osPythonモジュールを使用して、次の従来の方法で取得できます。

>>> import os
>>> f = open('/Users/Desktop/febROSTER2012.xls')
>>> os.path.dirname(f.name)
>>> '/Users/Desktop/'

これにより、ディレクトリ構造を把握できます。


を使用すると、空の文字列が返されますf = open('febROSTER2012.xls')。どうすれば完全なパスに到達できますか?
NZD 2016

3

あなたもこのようにそれを得ることができます。

filepath = os.path.abspath(f.name)

2
これは、それが実際に存在するディレクトリではなく、現在の作業ディレクトリに追加されます。
バクサウ2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.