<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def __search_files(self, files):
 """ Searches in given files. :param files: Files. :type files: list """


        for file in files:
            if self.__interrupt:
                return

            if not foundations.common.path_exists(file):
                continue

            if foundations.io.is_readable(file):
                if foundations.io.is_binary_file(file):
                    continue

            LOGGER.info("{0} | Searching '{1}' file!".format(self.__class__.__name__, file))
            cache_data = self.__container.files_cache.get_content(file)
            if not cache_data:
                reader = foundations.io.File(file)
                content = reader.read()
                if content is None:
                    LOGGER.warning("!> Error occured while reading '{0}' file proceeding to next one!".format(file))
                    continue
                self.__container.files_cache.add_content(**{file: CacheData(content=content, document=None)})
            else:
                content = cache_data.content
            occurrences = self.__search_document(QTextDocument(QString(content)), self.__pattern, self.__settings)
            occurrences and self.__search_results.append(SearchResult(file=file,
                                                                      pattern=self.__pattern,
                                                                      settings=self.__settings,
                                                                      occurrences=occurrences))