2010-01-13 28 views
80

Tôi có một vấn đề nhỏ với ~ trong đường dẫn của tôi.python - os.makedirs không hiểu ~ trong đường dẫn của tôi?

Ví dụ mã này tạo một số thư mục gọi là "~/some_dir", và không hiểu rằng tôi muốn tạo some_dir trong thư mục chính của mình.

my_dir = "~/some_dir" 
if not os.path.exists(my_dir): 
    os.makedirs(my_dir) 

Lưu ý đây là trên hệ thống dựa trên Linux.

Trả lời

148

bạn cần phải mở rộng dấu ngã bằng tay:

my_dir = os.path.expanduser('~/some_dir') 
12

Đó có thể là vì Python không phải là Bash và không làm theo cùng một quy ước. Bạn có thể sử dụng này:

homedir = os.path.expanduser('~') 
52

Việc chuyển ~/some_dir để $HOME/some_dir được gọi tilde expansion và là một tính năng giao diện người dùng thông thường. Hệ thống tập tin không biết gì về nó.

Trong Python, tính năng này được thực hiện bởi os.path.expanduser:

my_dir = os.path.expanduser("~/some_dir") 
+0

Thật vậy, và nó là hoàn toàn hợp lệ để có một tập tin hoặc thư mục có tên '~'. Vì vậy, các phím tắt vỏ nhà là mơ hồ và tốt nhất tránh nếu bạn có thể. – bobince

+4

Lưu ý rằng một người có thể truy cập tệp/dir có tên "~" trong thư mục hiện tại ngay cả khi mở rộng dấu ngã, bằng ký hiệu "./~". Điều đó hoạt động vì ~ mở rộng chỉ xảy ra ở đầu tên tệp. Nó cũng là một hack thuận tiện cho tên tập tin bắt đầu bằng "-" hoặc các ký tự khác được xử lý đặc biệt bởi giao diện dòng lệnh. Bạn có thể nói rằng tôi có thể đã thực hiện quá nhiều quá trình hack kịch bản lệnh shell. – ddaa

+0

'Hệ thống tệp không biết gì về nó.' +1 – Bin

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