2011-10-16 47 views
113

Tôi muốn lấy đường dẫn của thư mục hiện tại mà tệp .py đang thực hiện.os.path.dirname (__ file__) trả về trống

Một tập tin đơn giản D:\test.py với mã:

import os 

print os.getcwd() 
print os.path.basename(__file__) 
print os.path.abspath(__file__) 
print os.path.dirname(__file__) 

Nó được dây mà đầu ra là:

D:\ 
test.py 
D:\test.py 
EMPTY 

Tôi đang mong đợi kết quả tương tự từ getcwd()path.dirname().

Với os.path.abspath = os.path.dirname + os.path.basename, tại sao

os.path.dirname(__file__) 

lợi nhuận trống rỗng?

Trả lời

183

os.path.abspath = os.path.dirname + os.path.basename không giữ. chúng tôi chứ không phải có

os.path.dirname(filename) + os.path.basename(filename) == filename 

Cả dirname()basename() chỉ chia tên tập tin thông qua các thành phần mà không tính đến các thư mục hiện hành. Nếu bạn cũng muốn xem xét thư mục hiện tại, bạn phải làm như vậy một cách rõ ràng.

Để có được dirname của đường dẫn tuyệt đối, sử dụng

os.path.dirname(os.path.abspath(__file__)) 
+3

Hi Sven, bạn nói đúng, nó phải là os.path.dirname (os.path.abspath (__ file__)). Cảm ơn! Chỉ cần FYI, bạn nhận được một lỗi nhỏ trong dòng cuối cùng. – Flake

+8

lưu ý chú thích ở trên có chữ in đậm ở đó phải có gạch dưới ở cả hai mặt vì định dạng đánh dấu. câu trả lời gốc đã được thay đổi chính xác – watsonic

+1

Lưu ý rằng chúng tôi không bao giờ có 'os.path.dirname (tên tệp) + os.path.basename (tên tệp) == filename' do dấu tách thư mục bị thiếu. Chúng tôi muốn có: 'os.path.join (os.path.dirname (tên tệp), os.path.basename (tên tệp)) == filename' –

3
print(os.path.join(os.path.dirname(__file__))) 

Bạn cũng có thể sử dụng cách này

1
import os.path 

dirname = os.path.dirname(__file__) or '.' 
6

thể được sử dụng cũng như thế:

dirname(dirname(abspath(__file__))) 
+0

@Sven Câu trả lời của Marnach hoạt động, nhưng điều này cảm thấy sạch hơn nhiều. – lordB8r

3
os.path.split(os.path.realpath(__file__))[0] 

os.path.realpath(__file__) trả về mức độ hiển thị của tập lệnh hiện tại; os.path.split (abspath) [0] trả về thư mục hiện tại

Các vấn đề liên quan