Python'da açık dosyadan yolu alın


113

Açık bir dosyam varsa os, tam yolu bir dizge olarak almak için bir çağrı var mı?

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

Gönderen f, nasıl alacağı "/Users/Desktop/febROSTER2012.xls"?

Yanıtlar:


145

Buradaki anahtar , açılan dosyayı temsil eden nesnenin nameniteliğidir f. Böyle anlıyorsun:

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

Yardımcı olur mu?


4
Tarafından oluşturulan dosyalar için: tempfile.TemporaryFile(mode='w', prefix='xxx', suffix='.txt')çalışmıyor!
Victor

19
@Victor: Lütfen tempfileözellikle bahsettiğiniz tempfile.NamedTemporaryFilebelgelerin hemen altındaki modül belgelerini okuyun tempfile.TemporaryFile. Bu, geçici dosya için özel bir durumdur ve belgelerde görüldüğü gibi, zaten mevcut bir çözüm vardır. tempfile.TemporaryFileadı okumak istemeniz durumunda kullanılması amaçlanmamıştır.
Tadeck

12
Open ('foo.txt', 'w') kullanarak bir dosya oluşturur ve ardından f.name yaparsanız, size yalnızca foo.txt
searchengine27

Zans, göreceli yollar için de işe yarayan bir çözüm sunar. Aşağıdaki cevabına bakın.
Markus

1
Eğer böyle göreli bir yol kullanırsanız unutmayın f = open('some/relative/path')ve sonra gibi çalışma dizinini değiştirmek os.chdir('somewhere/esle'), o zaman f.namebuna göre güncelleme olmayacak ve mevcut çalışma dizini mantıklı olmayacaktır.
user986730

96

Aynı sorunu yaşadım. Göreli bir yol kullanıyorsanız, os.path.dirname (yol) yalnızca göreli yolu döndürür. os.path.realpath hile yapar:

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

15
Bu aslında gerçek cevap.
BlueTrin

2
Bu, yalnızca ilgili dosya yolu hala doğru dosya yolu ise işe yarar. Dosya adını '~ / Documents /' dizininden 'metin.txt' olarak belirtir ve sonra dizinleri '~ /' olarak değiştirirsem os.path.realpath, '~ / Documents / text.txt' yerine '~ / text.txt' döndürür.
K.Nielson

1
Realpath ile ilgili bir sorun fark ettim. Dosyaların harf durumunu düzeltmez, bunun yerine open deyiminde kullanılan durumu korur. Dosya adını aslında dosya sisteminde olduğu gibi döndüreceğini ummuştum. (Bu elbette Windows)
RufusVS

12

Ve sadece dizin adını almak istiyorsanız ve onunla birlikte gelen dosya adına gerek yoksa, bunu osPython modülünü kullanarak aşağıdaki geleneksel yolla yapabilirsiniz .

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

Bu şekilde dizin yapısını elde edebilirsiniz.


Bu, kullanırsanız boş bir dize döndürür f = open('febROSTER2012.xls'). Tam yola nasıl gidebilirsin?
NZD

3

Bu şekilde de elde edebilirsiniz.

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

3
Bu, onu gerçekte bulunduğu dizine değil, geçerli çalışma dizinine ekler.
Bachsau
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.