Làm cách nào để lấy thư mục chính trong Python?


919

Tôi cần lấy vị trí của thư mục chính của người dùng đã đăng nhập hiện tại. Hiện tại, tôi đang sử dụng những thứ sau trên Linux:

os.getenv("HOME")

Tuy nhiên, điều này không hoạt động trên Windows. Cách chính xác đa nền tảng để làm điều này là gì?


1
Đây được đánh dấu là bản sao của Cách tìm thư mục chính của người dùng thực bằng python , nhưng tôi đã bỏ phiếu mở lại vì câu trả lời này hoạt động trên Python 3 còn câu trả lời cũ hơn thì không.
Dour High Arch

Câu trả lời:


1641

Bạn muốn sử dụng os.path.expanduser .
Điều này sẽ đảm bảo nó hoạt động trên tất cả các nền tảng:

from os.path import expanduser
home = expanduser("~")

Nếu bạn đang sử dụng Python 3.5+, bạn có thể sử dụng pathlib.Path.home () :

from pathlib import Path
home = str(Path.home())

47
cần lưu ý rằng nếu người dùng đăng nhập vào một miền trên windows và đặt thư mục chính hồ sơ của họ trong thư mục đang hoạt động thì điều này sẽ báo cáo thư mục mạng được ánh xạ thay vì thư mục chính cục bộ
scape

7
Các pathlib.Path.home()hiện có sẵn từ Python3.5 trở đi ( docs.python.org/3/library/pathlib.html#pathlib.Path.home )
Ivan De Paz Centeno

9
Tôi tự hỏi tại sao không ai khác đề cập đến nó trong câu hỏi này, nhưng nếu bạn cần biết thư mục chính của người dùng khác ở đâu, bạn có thể sử dụng os.path.expanduser('~username'). Có lẽ chỉ áp dụng cho Linux.
Tối đa

2
@Dipayan không, đó là backport Python 2 của pathlib. Đối với Python 3, pathlib là chính xác.
Haystack

2
Kết quả là như nhau. Nếu bạn thường làm việc với pathlib, bạn có thể thích giải pháp pathlib hơn (và bỏ qua lệnh gọi của str). Nếu bạn chỉ muốn đường dẫn dưới dạng chuỗi, cả hai đều làm như vậy.
Niklas Mertsch

-16

Đây là một cd cách linux .. nếu bạn cần sử dụng nó để thay thế, hãy lưu ý: (nếu bạn đang ở trong một thư mục con thì nó sẽ chuyển đến thư mục)


4
Điều này thay đổi đối với thư mục trước đó. Có lẽ bạn đang nhìn nhầm câu hỏi?
TheTechRobo36414519

1
Tôi nghĩ OP đang tìm kiếm thứ gì đó để hoạt động trong một tập lệnh python và lệnh đó sẽ chuyển đến dir mẹ của cwd, có thể không phải là dir gia đình của người dùng.
Benjamin Goodacre
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.