2010-08-02 31 views
17
def CreateDirectory(pathName): 
    if not os.access(pathName, os.F_OK): 
     os.makedirs(pathName) 

so:Python - sự khác biệt giữa os.access và os.path.exists?

def CreateDirectory(pathName): 
    if not os.path.exists(pathName): 
     os.makedirs(pathName) 

Tôi hiểu rằng os.access là một chút linh hoạt hơn vì bạn có thể kiểm tra RWE thuộc tính cũng như con đường tồn tại, nhưng có một số khác biệt tinh tế tôi đang mất tích ở đây giữa hai triển khai này?

+3

Nếu các tài liệu được tin tưởng, nó thậm chí còn tinh tế hơn những gì các câu trả lời nói. Chế độ 'os.F_OK' là đặc biệt để kiểm tra sự tồn tại, không cho phép; trong khi đối với 'os.path.exists()': "Trên một số nền tảng, hàm này có thể trả về False nếu quyền không được cấp để thực thi os.stat() trên tệp được yêu cầu, ngay cả khi đường dẫn vật lý tồn tại." [Trang người dùng FreeBSD] (http://www.freebsd.org/cgi/man.cgi?query=access&sektion=2) nói 'quyền truy cập' rẻ hơn 'stat' để kiểm tra sự tồn tại. –

Trả lời

13

Tốt hơn là chỉ bắt ngoại lệ thay vì cố gắng ngăn chặn nó. Có một lý do zillion rằng makedirs có thể thất bại

def CreateDirectory(pathName): 
    try: 
     os.makedirs(pathName) 
    except OSError, e: 
     # could be that the directory already exists 
     # could be permission error 
     # could be file system is full 
     # look at e.errno to determine what went wrong 

Để trả lời câu hỏi của bạn, os.access thể thử nghiệm cho phép đọc hoặc viết các tập tin (như đăng nhập người dùng). os.path.exists chỉ đơn giản là cho bạn biết liệu có điều gì đó ở đó hay không. Tôi hy vọng hầu hết mọi người sẽ sử dụng os.path.exists để kiểm tra sự tồn tại của một tệp vì nó dễ nhớ hơn.

4

os.access kiểm tra xem đường dẫn có thể được truy cập bởi người dùng hiện tại os.path.exists kiểm tra xem đường dẫn có tồn tại không. os.access có thể trả lại False ngay cả khi đường dẫn tồn tại.

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