code: def _path_components(self, path):
          
          if not path or path == self._path_separator(path):
              return []
          drive, path = self.splitdrive(path)
          path_components = path.split(self._path_separator(path))
          assert drive or path_components
          if not path_components[0]:
              if len(path_components) > 1 and not path_components[1]:
                  path_components = []
              else:
                  # This is an absolute path.
                  path_components = path_components[1:]
          if drive:
              path_components.insert(0, drive)
          return path_components
docs: Breaks the path into a list of component names.
  
          Does not include the root directory as a component, as all paths
          are considered relative to the root directory for the FakeFilesystem.
          Callers should basically follow this pattern:
  
          .. code:: python
  
              file_path = self.absnormpath(file_path)
              path_components = self._path_components(file_path)
              current_dir = self.root
              for component in path_components:
                  if component not in current_dir.contents:
                      raise IOError
                  _do_stuff_with_component(current_dir, component)
                  current_dir = current_dir.get_entry(component)
  
          Args:
              path:  Path to tokenize.
  
          Returns:
              The list of names split from path.