2010-08-07 122 views
417

Tôi muốn lấy đường dẫn thư mục của tệp hiện tại.
tôi đã cố gắng:Cách lấy đường dẫn đầy đủ của thư mục tệp hiện tại bằng Python?

>>> os.path.abspath(__file__) 
'C:\\python27\\test.py' 

Nhưng làm thế nào tôi có thể lấy lại con đường của thư mục? Ví dụ:

'C:\\python27\\' 
+3

thể trùng lặp của [Tìm thư mục hiện hành và thư mục tập tin của] (http: // stackoverflow .com/questions/5137497/find-current-directory-và-files-directory) – user2284570

+4

'__file__' không được định nghĩa khi bạn chạy python như một trình bao tương tác. Đoạn mã đầu tiên trong câu hỏi của bạn trông giống như nó từ một trình bao tương tác, nhưng thực sự sẽ tạo ra một 'NameError', ít nhất là trên trăn 2.7.3, nhưng những người khác nữa tôi đoán. – drevicko

Trả lời

889

Nếu bạn có nghĩa là thư mục của kịch bản được chạy:

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

Nếu bạn có nghĩa là thư mục làm việc hiện tại:

import os 
os.getcwd() 

Lưu ý rằng trước và sau khi file là hai dấu gạch dưới, không chỉ một.

+29

abspath() là bắt buộc nếu bạn không muốn khám phá các hành vi lạ trên cửa sổ, trong đó dirname (__ file__) có thể trả về một chuỗi rỗng! – sorin

+4

phải là os.path.dirname (os.path.abspath (os .__ file__))? – DrBailey

+1

@drbailey: no. Điều gì làm cho bạn nghĩ rằng nó nên? –

7
import os 
print os.path.dirname(__file__) 
+18

Xin lỗi nhưng câu trả lời này là không đúng, câu trả lời đúng là cái được tạo bởi Bryan 'dirname (abspath (__ file__)). Xem nhận xét để biết chi tiết. – sorin

+1

Nó sẽ cho '/' là đầu ra – Tripathi29

4

Bạn có thể sử dụng osos.path thư viện một cách dễ dàng như sau

import os 
os.chdir(os.path.dirname(os.getcwd())) 

os.path.dirname lợi nhuận thư mục trên từ hiện tại. Nó cho phép chúng ta thay đổi lên cấp cao hơn mà không cần phải chuyển bất kỳ đối số tệp nào và không biết đường dẫn tuyệt đối.

+4

Điều này không cung cấp thư mục của _file_ hiện tại. Nó trả về thư mục của thư mục làm việc hiện tại có thể hoàn toàn khác. Những gì bạn đề xuất chỉ hoạt động nếu tệp nằm trong thư mục làm việc hiện tại. –

0

IPython có lệnh ma thuật %pwd để nhận thư mục hoạt động hiện tại. Nó có thể được sử dụng theo cách sau:

from IPython.terminal.embed import InteractiveShellEmbed 

ip_shell = InteractiveShellEmbed() 

present_working_directory = ip_shell.magic("%pwd") 

On IPython Jupyter Notebook %pwd có thể được sử dụng trực tiếp như sau:

present_working_directory = %pwd 
Các vấn đề liên quan