+ """Returns True if a file exists and is a normal file.
+
+ >>> does_file_exist(__file__)
+ True
+ """
+ return os.path.exists(filename) and os.path.isfile(filename)
+
+
+def does_directory_exist(dirname: str) -> bool:
+ """Returns True if a file exists and is a directory.
+
+ >>> does_directory_exist('/tmp')
+ True
+ """
+ return os.path.exists(dirname) and os.path.isdir(dirname)
+
+
+def does_path_exist(pathname: str) -> bool:
+ """Just a more verbose wrapper around os.path.exists."""
+ return os.path.exists(pathname)
+
+
+def get_file_size(filename: str) -> int:
+ """Returns the size of a file in bytes."""
+ return os.path.getsize(filename)
+
+
+def is_normal_file(filename: str) -> bool:
+ """Returns True if filename is a normal file.
+
+ >>> is_normal_file(__file__)
+ True
+ """
+ return os.path.isfile(filename)
+
+
+def is_directory(filename: str) -> bool:
+ """Returns True if filename is a directory.
+
+ >>> is_directory('/tmp')
+ True
+ """
+ return os.path.isdir(filename)
+
+
+def is_symlink(filename: str) -> bool:
+ return os.path.islink(filename)
+
+
+def is_same_file(file1: str, file2: str) -> bool:
+ return os.path.samefile(file1, file2)