code: def safe_path(path, replacement="_"):
      
      if not isinstance(path, str):
          raise TypeError("path must be a string")
      if os.sep not in path:
          return safe_filename(path, replacement=replacement)
      filename = safe_filename(os.path.basename(path))
      dirname = os.path.dirname(path)
      safe_dirname = ""
      regexp = regex.path.windows.safe if win_based else regex.path.linux.safe
      if win_based and dirname.find(":\\") == 1 and dirname[0].isalpha():
          safe_dirname = dirname[0:3]
          dirname = dirname[3:]
      if regexp.search(dirname) and check_filename(filename):
          return path
      else:
          for char in dirname:
              safe_dirname += char if regexp.search(char) else replacement
      sanitized_path = os.path.normpath("{path}{sep}{filename}".format(
          path=safe_dirname,
          sep=os.sep if not safe_dirname.endswith(os.sep) else "",
          filename=filename))
      if (not filename and
              path.endswith(os.sep) and
              not sanitized_path.endswith(os.sep)):
          sanitized_path += os.sep
      return sanitized_path
docs: Replace unsafe path characters with underscores. Do NOT use this
      with existing paths that cannot be modified, this to to help generate
      new, clean paths.
  
      Supports windows and *nix systems.
  
      :param path: path as a string
      :param replacement: character to use in place of bad characters
      :return: a safer path