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.txtaltı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?
abspathiş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.pathiş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 PathsonraPath('mydir/myfile.txt').abspath()
pathmodül kullanıyor olabilirsiniz . Bağlı modül adlı bir sınıf kullanır path.
Bugün ayrıca şu unipathpaketi 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 pathlibgerç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 Pathtüm ilgili işlevlere sahip nesneleri kullanabileceğinizi unutmayın :os.pathabspath
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)))
expanduserDosya (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 expandvarsdiğ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 osabs 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 srblibiç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