os.path.dirname (__ file__) trả về sản phẩm nào


164

Tôi muốn lấy đường dẫn của thư mục hiện tại, theo đó một tệp .py được thực thi.

Ví dụ: một tệp đơn giản D:\test.pycó mã:

import os

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

Điều kỳ lạ là đầ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().

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

os.path.dirname(__file__)

Trả về sản phẩm nào?

Câu trả lời:


255

os.path.abspath = os.path.dirname + os.path.basenamekhông giữ được. chúng ta nên có

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

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

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

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

3
Xin chào Sven, bạn đã đú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 máy nhỏ ở dòng cuối cùng.
Flake

11
lưu ý các bình luận ở trên có một chữ in đậm nên có gạch chân ở cả hai bên vì định dạng đánh dấu. câu trả lời ban đầu đã được thay đổi một cách chính xác
watsonic

1
Lưu ý rằng chúng tôi không bao giờ có os.path.dirname(filename) + os.path.basename(filename) == filenamevì dấu tách thư mục bị thiếu. Chúng ta nên có:os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename
Jean Paul

Tôi bối rối, bạn có nên để dựa dựa trên = os.path.abspath (os.path.dirname ( file )) trong chương trình của bạn không? hoặc những gì bạn thay thế hoặc nơi bạn thay thế đường dẫn của bạn như C: \ Users \ Test \ app.db?
0004

@ pes04 __file__mở rộng thành tên của tệp hiện tại, vì vậy bạn có thể sử dụng bản sao nguyên văn của mã từ câu trả lời này.
Sven Marnach

9

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

dirname(dirname(abspath(__file__)))


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

os.path.realpath(__file__)trả lại sự thất vọng của kịch bản hiện tại; os.path.split (abspath) [0] trả về thư mục hiện tại


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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.