2008-09-09 11 views
455

"mydir/myfile.txt" gibi bir yol verildiğinde, mutlak dosya yolunu Python'daki geçerli çalışma dizinine göre nasıl bulabilirim? Örneğin. Windows üzerinde, ben sonunda olabilir:Python'da mutlak bir dosya yolu nasıl alınır

>>> import os 
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt") 
'C:/example/cwd/mydir/myfile.txt' 
+0

Benzer soru: https://stackoverflow.com/questions/7165 749/açık-dosya-in-a-nispi-konum-in-python – Raj

cevap

641
>>> import os 
>>> os.path.abspath("mydir/myfile.txt") 
'C:/example/cwd/mydir/myfile.txt' 

Ayrıca çalışır os.path işlevleri ve diğer ilgili işlevler, dizeler kullanıldığı yerlerde kullanılabilen bir nesne üzerindeki yöntemlerle:

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

Ben a clean interface to common os.path utilities sunduğu olarak bu paketi kullanarak öneriyoruz:

+16

Not: Çoğu platformda, bu, aşağıdaki gibi normpath() işlevini çağırmakla eşdeğerdir: normpath (join (os.getcwd(), yol)) '. Yani eğer mydir/myfile.txt 'os.getcwd()' nin altında değilse, mutlak yol gerçek path__ 'dir. – coanor

+23

@coanor? Açık bir root olmadan, 'mydir/myfile.txt', dolaylı olarak, şu anki çalışma dizinindeki bir yola başvurur, bu nedenle'./Mydir/myfile.txt'. Bu, girmeyi planladığınız yol olmayabilir, ancak söyleyebileceğim kadarıyla yolun doğru yorumu gibi görünüyor. Detaylandırır mısınız? – jpmc26

47
>>> import os 
>>> os.path.abspath('mydir/myfile.txt') 
'C:\\example\\cwd\\mydir\\myfile.txt' 
>>> 
21

Daha da iyisi, path.py modülü monte hepsi sarar: Zaten mutlak bir yol olup olmadığını

"C:/example/cwd/mydir/myfile.txt" 
+2

Çok kötü bir şey, stdlib'e hiçbir zaman uygun bir dosya adı modülü içermiyor. –

+1

@Torsten Marek: Bu acı verici ve uzun süredir devam eden bir ihmal. – flow

+4

Şimdi Python 3.4: 'pathlib' için yaptılar. Bu konudaki cevabımı görün. – twasbrillig

10

Bugün ayrıca path.py dayanıyordu unipath paketini kullanabilirsiniz.

42

Yeni Python 3.4 kitaplığını pathlib kullanabilirsiniz. (Ayrıca Python 2.6 veya 2.7 için pip install pathlib'u kullanarak da alabilirsiniz.) Yazarlar wrote: "Bu kütüphanenin amacı, dosya sistemi yollarını ve kullanıcıların üzerinde yaptıkları ortak işlemleri yönetmek için basit bir sınıf hiyerarşisi sağlamaktır."

Windows mutlak bir yol almak 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 tarih:

>>> 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 Buradasınız: https://docs.python.org/3/library/pathlib.html

+3

Çok yardımcı. 'Os.path.abspath()' ın kullanılması bana bir hata verdi: 'AttributeError: 'NoneType' nesnesinin 'startwith' özelliği yoktur,' Path() 'i kullanarak. Resol() 'aynı göreli dosya yoluna sahip değildir. (Linux ve Python3.4) – NuclearPeon

3

Ben burada Glob

kullanmayı tercih Geçerli klasördeki tüm dosya türlerini listeleme:

01 Burada
import glob 
for x in glob.glob(): 
    print(x) 

geçerli klasörde (örneğin) tüm .txt dosyaları listelemek için yapılması gerekenler:

import glob 
for x in glob.glob('*.txt'): 
    print(x) 
burada

bir dizin seçti tüm dosya türlerini listelemek için yapılması gerekenler:

import glob 
for x in glob.glob('C:/example/hi/hello/'): 
    print(x) 

bu yardımcı oldu umuyoruz

+0

Farklı bir soruya cevap veriyor gibi görünüyorsunuz. "Nasıl bir yol alırım?", Ama "mutlak bir yol" değildi. Birincisi, ilk iki vakanız için glob 'nin göreceli olarak göreceli yoluna doğru cevabı ('os.path.abspath()') uygulayabilir ... – NichtJens

-2
filePath = os.path.abspath(directoryName) 
filePathWithSlash = filePath + "\\" 
filenameWithPath = os.path.join(filePathWithSlash, filename) 
+0

Soru, resmin nasıl yeniden adlandırılacağı ya da böyle bir şeyin nasıl yeniden adlandırılacağıydı. Sadece 5. satır 'filePath = os.path ...' – derM

+0

derM evet diye sorulmuştum evet haklısın, ben bunu gönderdiğimde başka bir şeye bakıyordum. Bu sayfadaki soruyla alakasız olanı kaldırdım. –