浏览代码

实现判断文件是否可读和是否可写的方法

张 志亮 9 年之前
父节点
当前提交
8e78f35b6b
共有 1 个文件被更改,包括 50 次插入0 次删除
  1. 50 0
      app/walk_sys.py

+ 50 - 0
app/walk_sys.py

@@ -6,6 +6,56 @@ import os.path
 import hashlib
 
 
+def is_writeable(path, check_parent=False):
+    '''
+    Check if a given path is writeable by the current user.
+
+    :param path: The path to check
+    :param check_parent: If the path to check does not exist, check for the
+           ability to write to the parent directory instead
+    :returns: True or False
+    '''
+
+    if os.access(path, os.F_OK) and os.access(path, os.W_OK):
+        # The path exists and is writeable
+        return True
+
+    if os.access(path, os.F_OK) and not os.access(path, os.W_OK):
+        # The path exists and is not writeable
+        return False
+
+    # The path does not exists or is not writeable
+
+    if check_parent is False:
+        # We're not allowed to check the parent directory of the provided path
+        return False
+
+    # Lets get the parent directory of the provided path
+    parent_dir = os.path.dirname(path)
+
+    if not os.access(parent_dir, os.F_OK):
+        # Parent directory does not exit
+        return False
+
+    # Finally, return if we're allowed to write in the parent directory of the
+    # provided path
+    return os.access(parent_dir, os.W_OK)
+
+def is_readable(path):
+    '''
+    Check if a given path is readable by the current user.
+
+    :param path: The path to check
+    :returns: True or False
+    '''
+
+    if os.access(path, os.F_OK) and os.access(path, os.R_OK):
+        # The path exists and is readable
+        return True
+
+    # The path does not exist
+    return False
+
 def findfile(start, name=None):
     for relpath, dirs, files in os.walk(start):
         if name in files: