Şu anda çalışan Python betiği ile aynı dizinde bulunan dosyaları,
open("Some file.txt", "r")
Ancak, komut dosyasını Windows'ta çift tıklatarak çalıştırıldığında, dosyayı yanlış dizinden açmaya çalışacağını keşfettim.
O zamandan beri formun bir komutunu kullandım
open(os.path.join(sys.path[0], "Some file.txt"), "r")
ne zaman bir dosya açmak istesem. Bu benim özel kullanımım için çalışıyor, ancak sys.path[0]
başka bir kullanım durumunda başarısız olup olmayacağından emin değilim .
Benim sorum: Şu anda çalışan Python betiği ile aynı dizinde bir dosyayı açmanın en iyi ve en güvenilir yolu nedir?
İşte şimdiye kadar anlayabildiğim:
os.getcwd()
veos.path.abspath('')
komut dosyası dizinini değil "geçerli çalışma dizinini" döndürün.os.path.dirname(sys.argv[0])
veos.path.dirname(__file__)
kodu çağırmak için kullanılan yolu göreceli veya boş olabilir (kod cwd'de ise). Ayrıca,__file__
komut IDLE veya PythonWin çalıştırıldığında yok.sys.path[0]
veos.path.abspath(os.path.dirname(sys.argv[0]))
komut dosyası dizinini döndürüyor gibi görünüyor. Bu ikisi arasında herhangi bir fark olup olmadığından emin değilim.
Düzenle:
Ben sadece ne yapmak istiyorum daha iyi "içeren modülü ile aynı dizinde bir dosya açmak" olarak tarif olacağını fark ettim. Başka bir deyişle, başka bir dizinde yazdığım bir modülü içe aktarırsam ve bu modül bir dosya açarsa, modülün dizinindeki dosyayı aramasını istiyorum. Bulduğum hiçbir şeyin bunu yapabileceğini sanmıyorum ...
__file__
kullanılamaz, daha sonra kullanmaksys.argv[0]
yerinedirname(__file__)
. Gerisi beklendiği gibi çalışmalıdır. Kullanmayı seviyorum__file__
çünkü kütüphane kodundasys.argv[0]
, özellikle bazı 3. taraf komut dosyası ile içe aktarılmışsa, kodunuzu hiç göstermeyebilir.