wordmarker.data.resource 源代码

import os
from chardet import UniversalDetector
from wordmarker.contexts import SystemContext
from wordmarker.utils import log


[文档]class Resource(SystemContext): """ :: 资源类,包含与资源相关的属性和判断的方法 """ @log def __init__(self, path, loader): self.__path = path self.__loader = loader
[文档] def is_file(self): """ .. note:: 判断是否为文件 :return: - 是文件,返回True - 不是文件,返回False """ return os.path.isfile(self.__path)
[文档] def exists(self): """ .. note:: 判断文件或目录是否存在 :return: - 存在,返回True - 不存在,返回False """ return os.path.exists(self.__path)
[文档] def get_file_name(self): """ .. note:: 获取文件名 :return: - 是文件,返回文件的名字 - 是目录,返回当前目录下的所有文件的文件名 """ if self.exists(): if self.is_file(): path, file_name = os.path.split(self.__path) return file_name else: return os.listdir(self.__path) else: self._logger.error("文件或目录不存在")
[文档] def get_file(self): """ .. note:: 获取文件,返回文件的绝对路径 :return: - 是文件,返回文件的绝对路径 - 是目录,返回当前目录下所有文件的绝对路径 """ if self.exists(): if self.is_file(): return os.path.abspath(self.__path) else: file_list = [] for i in os.listdir(self.__path): file_list.append(os.path.abspath(self.__path + self.path_separator + i)) return file_list else: self._logger.error("文件或目录不存在")
[文档] def get_dir(self): """ .. note:: 获取目录,返回目录的绝对路径 :return: - 是目录,返回目录的绝对路径 - 是文件,返回文件所在的目录 """ if self.exists(): if not self.is_file(): return os.path.abspath(self.__path) else: path, file_name = os.path.split(self.__path) return path else: self._logger.error("文件或目录不存在")
[文档] def get_file_encoding(self): """ .. note:: 获取文件的编码 :return: - 是文件,获取文件的编码,返回一个文件编码的字符串 - 是目录,获取当前目录下所有文件的编码,返回一个字典 - key为文件的绝对路径 - value为文件的编码 """ if self.exists(): if self.is_file(): try: with open(self.get_file(), 'rb') as f: detector = UniversalDetector() for line in f.readlines(): detector.feed(line) if detector.done: break detector.close() result: dict = detector.result return result.get('encoding') except (IOError, ValueError, TypeError) as exc: self._logger.exception("获取文件的编码失败", exc_info=exc) else: file_list = self.get_file() file_encoding = {} try: detector = UniversalDetector() for file in file_list: detector.reset() with open(file, 'rb') as f: for line in f.readlines(): detector.feed(line) if detector.done: break detector.close() result: dict = detector.result file_encoding[file] = result.get('encoding') return file_encoding except (IOError, ValueError, TypeError) as exc: self._logger.exception("获取文件的编码失败", exc_info=exc) else: self._logger.error("文件或目录不存在")
[文档] def get_file_name_prefix_suffix(self): """ .. note:: 获取文件的前缀和后缀 :return: - 是文件,获取文件的前缀和后缀,返回一个元组 - 是目录,获取目录下所有文件的前缀和后缀,返回一个字典 - key为文件名 - value为由文件的前缀和后缀组成的元组 """ if self.exists(): if self.is_file(): file_name = self.get_file_name() return os.path.splitext(file_name) else: p_s_dict = {} file_name_list = self.get_file_name() for file_name in file_name_list: p_s_dict[file_name] = os.path.splitext(file_name) return p_s_dict else: self._logger.error("文件或目录不存在")
[文档] def get_loader(self): """ .. note:: 获取加载当前资源的加载器 :return: - 加载器 """ return self.__loader