def listdir()

in easycv/file/file_io.py [0:0]


    def listdir(self,
                path,
                recursive=False,
                full_path=False,
                contains: Union[str, List[str]] = None):
        """
        List all objects in path. Same usage as `os.listdir`.

        Example:
            from easycv.file import io
            io.access_oss(your oss config) # only oss file need, refer to `IO.access_oss`
            ret = io.listdir('oss://bucket/dir', recursive=True)
            print(ret)
        Args:
            path: local file path or oss path.
            recursive: If False, only list the top level objects.
                If True, recursively list all objects.
            full_path: if full path, return files with path prefix.
            contains: substr to filter list files.

        return: A list of path.
        """
        from oss2 import ObjectIterator

        if not is_oss_path(path):
            return super().listdir(path, recursive, full_path, contains)

        bucket, path = self._get_bucket_obj_and_path(path)
        path = self._correct_oss_dir(path)
        files = [
            obj.key for obj in ObjectIterator(
                bucket, prefix=path, delimiter='' if recursive else '/')
        ]
        if path in files:
            files.remove(path)
        if recursive:
            files = [
                i for i in files
                if not self.isdir(f'{OSS_PREFIX}{bucket.bucket_name}/{i}')
            ]

        if not files and not self._obj_exists(bucket, path):
            raise FileNotFoundError(
                f'No such directory: {OSS_PREFIX}{bucket.bucket_name}/{path}')

        if full_path:
            files = [
                f'{OSS_PREFIX}{bucket.bucket_name}/{file}' for file in files
            ]
        else:
            files = [file[len(path):] for file in files]

        if not contains:
            return files

        if isinstance(contains, str):
            contains = [contains]
        files = [
            file for file in files
            if any(keyword in file for keyword in contains)
        ]
        return files