Yanıtlar:
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
Ayrıca zaten mutlak bir yolsa da çalışır:
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
normpath()
şöyle: normpath(join(os.getcwd(), path))
. Eğer mydir/myfile.txt
altında değilse os.getcwd()
, mutlak yol gerçek yol değildir .
mydir/myfile.txt
, geçerli çalışma dizini içindeki dolaylı olarak eşdeğer olduğu bir yolu dolaylı olarak ifade eder ./mydir/myfile.txt
. Bu, girmeyi amaçladığınız yol olmayabilir, ancak anlayabildiğim kadarıyla yolun doğru yorumu gibi görünüyor. Açıklayabilir misiniz?
abspath
işleve olan argüman ile gerçek bir dosya arasında hiçbir bağlantı olmadığını söyleyebilirim . Herhangi bir yol adı verebilir - varolmayan dosyalar ve dizin heirarchies iyi- ve abspath yolun bitlerini (üst dizin " ..
" öğesi dahil) çözecek ve bir dize döndürecektir. Bu sadece geçerli dizinden hesaplanan bir dizedir; gerçek bir dosya ile herhangi bir korelasyon tesadüfi, öyle görünüyor. Deneyin os.path.abspath("/wow/junk/../blha/hooey")
. İşe yarıyor.
os.path.exists
. Aksine, PowerShell gibi standart yol çözümleme fonksiyonu ile var olan yolda ısrar eden sistemler kullanmak için bir acıdır.
relpath
: "dosya sisteminin varlığını veya niteliğini doğrulamak için erişilemez path
". Buradaki argüman açıksa, neden açık olmalıyım relpath
?
Yeni Python 3.4 kitaplığını kullanabilirsiniz pathlib
. (Bunu Python 2.6 veya 2.7 kullanarak da edinebilirsiniz pip install pathlib
.) Yazarlar şöyle yazdı : "Bu kütüphanenin amacı, dosya sistemi yollarını ve kullanıcıların üzerlerinde yaptıkları ortak işlemleri işlemek için basit bir sınıf hiyerarşisi sağlamaktır."
Windows'ta mutlak bir yol elde etmek için:
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
Veya UNIX'te:
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
Dokümanlar burada: https://docs.python.org/3/library/pathlib.html
os.path.abspath()
bana bir hata verdi:, AttributeError: 'NoneType' object has no attribute 'startswith'
kullanma Path().resolve()
aynı göreli dosya yoluna sahip değil. (Linux ve Python3.4)
Daha da iyisi, modülü kurun (üzerinde bulunur PyPI
), tüm os.path
işlevleri ve diğer ilgili işlevleri, dizelerin kullanıldığı her yerde kullanılabilecek bir nesnenin yöntemlerine sarar :
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
pathlib
. Bu konudaki cevabımı gör.
from path import Path
sonraPath('mydir/myfile.txt').abspath()
path
modül kullanıyor olabilirsiniz . Bağlı modül adlı bir sınıf kullanır path
.
Bugün ayrıca şu unipath
paketi de kullanabilirsiniz path.py
: http://sluggo.scrapping.cc/python/unipath/
>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>
Yaygın os.path yardımcı programlarına temiz bir arayüz sunduğu için bu paketi kullanmanızı tavsiye ederim .
Soruyu pathlib
gerçekten cevaplayan Python 3.4+ için güncelleme :
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
Yalnızca geçici bir dizeye ihtiyacınız varsa , elbette dahil Path
tüm ilgili işlevlere sahip nesneleri kullanabileceğinizi unutmayın :os.path
abspath
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
expanduser
Dosya (veya dizin) adı ve konumu için verilen ifadenin bir ~/
satır aralığı (tilde kullanıcının ana dizinine atıfta bulunur) içermesi ve expandvars
diğer ortam değişkenleriyle (örneğin $HOME
) ilgilenmesi durumunda (Unix'te) gerekli olduğuna dikkat edin .
Bu her zaman başka bir komut dosyası içinden denir bile mevcut senaryonun doğru dosya adını alır. Özellikle kullanışlıdır subprocess
.
import sys,os
filename = sys.argv[0]
oradan, komut dosyasının tam yolunu aşağıdakilerle alabilirsiniz:
>>> os.path.abspath(filename)
'/foo/bar/script.py'
Ayrıca /..
, dizinlerin hiyerarşisinde 'yukarı' gitmek istediğiniz kadar klasör ekleyerek klasörlerde gezinmeyi de kolaylaştırır .
Cwd'yi almak için:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
Üst yol için:
>>> os.path.abspath(filename+"/../..")
'/foo'
"/.."
Diğer dosya adlarıyla birleştirerek sistemdeki herhangi bir dosyaya erişebilirsiniz.
Modül os
abs yolunu bulmak için bir yol sağlar.
AMA Linux'taki yolların çoğu ~
(tilde) ile başlıyor , bu da tatmin edici bir sonuç vermiyor.
bunun srblib
için kullanabilirsiniz .
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
kullanarak yükle python3 -m pip install srblib
Glob kullanmayı tercih ederim
geçerli klasörünüzdeki tüm dosya türlerini nasıl listeleyeceğiniz aşağıda açıklanmıştır:
import glob
for x in glob.glob():
print(x)
geçerli klasörünüzdeki tüm (örneğin) .txt dosyalarını nasıl listeleyeceğiniz aşağıda açıklanmıştır:
import glob
for x in glob.glob('*.txt'):
print(x)
seçilen bir dizindeki tüm dosya türlerini nasıl listeleyeceğiniz aşağıda açıklanmıştır:
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
umarım bu sana yardımcı olmuştur
os.path.abspath()
hangi göreceli yolun sağlandığına doğru cevap ( ) uygulanabilir glob
...
Mac kullanıyorsanız
import os
upload_folder = os.path.abspath("static/img/users")
bu size tam bir yol verecektir:
print(upload_folder)
aşağıdaki yolu gösterecektir:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user