Dapatkan jalur dari file terbuka dengan Python

113

Jika saya memiliki file yang terbuka, apakah ada ospanggilan untuk mendapatkan jalur lengkap sebagai string?

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

Dari f, bagaimana saya akan mendapatkannya "/Users/Desktop/febROSTER2012.xls"?

David542
sumber

Jawaban:

145

Kuncinya di sini adalah nameatribut fobjek yang mewakili file yang dibuka. Anda mendapatkannya seperti itu:

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

Apakah itu membantu?

Tadeck
sumber
4
Untuk file yang dibuat oleh: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')tidak berfungsi!
Victor
19
@Victor: Silakan baca dokumentasi tempfilemodul, khusus untuk tempfile.NamedTemporaryFile, tepat di bawah dokumentasi yang tempfile.TemporaryFileAnda sebutkan. Ini adalah kasus khusus untuk file sementara dan, seperti yang terlihat di dokumen, sudah ada solusi. tempfile.TemporaryFiletidak dimaksudkan untuk digunakan jika Anda ingin membaca namanya.
Tadeck
12
Jika Anda membuat file menggunakan open ('foo.txt', 'w') dan kemudian melakukan f.name, itu hanya memberi Anda keluaran foo.txt
searchengine27
Zans memberikan solusi yang juga berfungsi untuk jalur relatif. Lihat jawabannya di bawah ini.
Markus
Ada tempfile.NamedT TemporaryFile jika Anda membutuhkan nama.
Data Apollo
96

Saya memiliki masalah yang sama persis. Jika Anda menggunakan jalur relatif os.path.dirname (jalur) hanya akan mengembalikan jalur relatif. os.path.realpath melakukan trik:

>>> import os
>>> f = open('file.txt')
>>> os.path.realpath(f.name)
Zans
sumber
15
Ini sebenarnya jawaban sebenarnya.
BlueTrin
1
Ini hanya berfungsi jika jalur file relatif masih jalur file yang benar. Jika saya menentukan nama file sebagai 'text.txt' dari direktori '~ / Documents /' dan kemudian mengubah direktori menjadi '~ /', os.path.realpathakan mengembalikan '~ / text.txt' alih-alih '~ / Documents / text.txt'.
K. Nielson
1
Saya melihat ada masalah dengan realpath. Itu tidak memperbaiki kasus karakter alfa file melainkan menyimpan kasus yang digunakan dalam pernyataan terbuka. Saya berharap itu akan mengembalikan nama file seperti yang sebenarnya ada di sistem file. (Ini adalah Windows, tentu saja)
RufusVS
12

Dan jika Anda hanya ingin mendapatkan nama direktori dan tidak perlu nama file yang menyertainya, maka Anda dapat melakukannya dengan cara konvensional berikut menggunakan osmodul Python.

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

Dengan cara ini Anda bisa mendapatkan struktur direktori.

Ali Raza Bhayani
sumber
Ini mengembalikan string kosong jika Anda menggunakan f = open('febROSTER2012.xls'). Bagaimana Anda bisa mencapai jalur lengkap?
NZD
3

Anda juga bisa mendapatkannya seperti ini.

filepath = os.path.abspath(f.name)
answerSeeker
sumber
2
Yang akan menambahkannya ke direktori kerja saat ini, bukan direktori tempat ia sebenarnya berada.
Bachsau