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

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?


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)

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.


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)

2
Yang akan menambahkannya ke direktori kerja saat ini, bukan direktori tempat ia sebenarnya berada.
Bachsau
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.