工具集
基础工具一
Functions:
| 
 | 将字典形式的agg聚合参数转换为[原字段名,计算函数,储存字段名]列表形式 | 
| 
 | 规范文件扩展名,保持扩展名为点(.)开头 | 
| 
 | 将标量值和Collection类型都统一转换为LIST类型 | 
| 
 | 判断变量是否为空值 | 
| 
 | 打印带有时间的日志信息 | 
| 
 | 判断是否非空,对`is_empty`取反 | 
| 
 | 将秒转为时间描述 | 
| 
 | 将秒转为天、时、分、秒 | 
| 
 | 兼容pandas1和2的pd.to_datatime方法 | 
| 
 | 打印警告信息,嵌入函数内部,可由if_or_not控制是否打印 | 
- ricco.base.agg_parser(agg: dict) list
- 将字典形式的agg聚合参数转换为[原字段名,计算函数,储存字段名]列表形式 
- ricco.base.ensure_ext(ext: str)
- 规范文件扩展名,保持扩展名为点(.)开头 - 示例 - >>> ensure_ext('csv') '.csv' 
- ricco.base.ensure_list(val)
- 将标量值和Collection类型都统一转换为LIST类型 
- ricco.base.is_empty(x) bool
- 判断变量是否为空值 - 以下值认为是空白:
- 空白列表、字典, 如:[], {} 
- 空白Dataframe、Series, 如:pd.DataFrame() 
- 空白shapely格式的geometry,如:Point(np.nan, np.nan) 
 
 
- ricco.base.log(msg)
- 打印带有时间的日志信息 
- ricco.base.not_empty(x) bool
- 判断是否非空,对`is_empty`取反 
- ricco.base.second_to_desc(second: (<class 'int'>, <class 'float'>)) str
- 将秒转为时间描述 - 示例 - >>> second_to_desc(123) '2m 3s' >>> second_to_desc(1234) '20m 40s' >>> second_to_desc(123456) '1d 10h 17m 36s' 
- ricco.base.second_to_dhms(second: int) tuple
- 将秒转为天、时、分、秒 
- ricco.base.to_datetime(x, format=None, *args, **kwargs)
- 兼容pandas1和2的pd.to_datatime方法 
- ricco.base.warn_(msg, if_or_not=True, mode='warning')
- 打印警告信息,嵌入函数内部,可由if_or_not控制是否打印 - 参数:
- msg – 要输出的警告信息 
- if_or_not – 是否输出 
- mode – 警告类型,支持logging和warning 
 
 
基础工具二
Functions:
| 
 | 对多个条件执行and操作 | 
| 
 | 检查两个列表的差集 | 
| 
 | 求两个列表的差集 | 
| 
 | 删除列表中连续重复的元素 | 
| 
 | 将文本型的列表、字典等转为真正的类型 | 
| 
 | 提取字符串中的数值,默认返回所有数字组成的列表 | 
| 
 | 筛选第一个不为空的值 | 
| 
 | 修复字符串中的换行符和多余的空格: | 
| 
 | 将字符串两端的空格及换行符删除,如果为空白字符串则返回空值 | 
| 
 | 为某一字符串从某一集合中匹配相似度最高的元素 | 
| 
 | 模糊配对 | 
| 
 | 获取城市代码 | 
| 
 | 获取列表中长度最短的元素 | 
| 
 | 针对格式错误的uuid和空白值生成新的uuid | 
| 通过正则表达式将户型统一修改为1房,2房···5房及以上,目前只支持9室以下户型, 其中5室及以上的类别为“5房及以上” | |
| 
 | 将字典的key和value互换 | 
| 
 | 判断一个值是否能通过float方法转为数值型 | 
| 
 | 判断一个字符串是否是十六进制格式 | 
| 
 | 判断Dataframe中的某一列或某几列的组合是否唯一 | 
| 
 | 判断一个字符是否是uuid | 
| 
 | 检查列表内的元素类型是否全部满足多个类型之一 | 
| 
 | 列表转为字典,key为元素的顺序 | 
| 
 | 对多个条件执行or操作 | 
| 
 | 带有百分号的数值字符串转小数点形式的数值,没有百分号的返回原值 | 
| 
 | 计算周岁,默认按照当前时间点计算 | 
| 
 | 将中文转换为汉语拼音 | 
| 
 | 根据正则表达式快速提取匹配到的第一个 | 
| 
 | 根据多个正则表达式提取匹配到的所有值 | 
| 
 | 通过正则表达式删除左侧字符串 | 
| 
 | 将字典中值为空的元素删掉 | 
| 
 | 通过正则表达式删除右侧字符串 | 
| 
 | 删除末尾的‘.0’,并转为str格式,适用于对手机号等场景,如:'130.0' -> '130' | 
| 
 | 区间段划分工具 | 
| 
 | 根据一个列表对另一个列表进行筛选或排序,参照列表中不存在的元素按照原始顺序排列在后 | 
| 
 | 将常见的布尔类型的代替值转为布尔类型 | 
| 
 | 字符串转换为float | 
| 
 | 将字符串转为json格式的字符串 | 
| 
 | 将列表中的元素保留为字符串、唯一、非空 | 
| 
 | 合并列表 | 
| 
 | 连接字符串,空白字符串会被忽略 | 
- ricco.util.util.and_(*conditions)
- 对多个条件执行and操作 
- ricco.util.util.check_diff(ls1: list, ls2: list)
- 检查两个列表的差集 
- ricco.util.util.diff(ls1: list, ls2: list)
- 求两个列表的差集 
- ricco.util.util.drop_repeat(x: (<class 'list'>, <class 'tuple'>))
- 删除列表中连续重复的元素 - 示例 - >>> drop_repeat([1, 2, 2, 3, 4, 4, 4, 3]) [1, 2, 3, 4, 3] 
- ricco.util.util.eval_(x: str)
- 将文本型的列表、字典等转为真正的类型 
- ricco.util.util.extract_num(string: str, num_type: str = 'str', method: str = 'list', join_list: bool = False, ignore_pct: bool = True, multi_warning=False)
- 提取字符串中的数值,默认返回所有数字组成的列表 - 参数:
- string – 输入的字符串 
- num_type – 输出的数字类型,int/float/str,默认为str 
- method – 结果计算方法,对结果列表求最大/最小/平均/和等,numpy方法,默认返回列表本身 
- join_list – 是否合并列表,默认FALSE 
- ignore_pct – 是否忽略百分号,默认True 
- multi_warning – 当有多个值的时候是否输出警告信息 
 
 
- ricco.util.util.first_notnull_value(series: Iterable)
- 筛选第一个不为空的值 
- ricco.util.util.fix2str(s: str) str
- 修复字符串中的换行符和多余的空格:
- 连续多个换行符或空格,替换为一个空格 
- 删除字符串两端的换行符或空格 
- 空值:返回空白字符串 
- 非字符串:返回str()后的值 
 
 
- ricco.util.util.fix_str(x: str) -> (<class 'str'>, None)
- 将字符串两端的空格及换行符删除,如果为空白字符串则返回空值 
- ricco.util.util.fuzz_match(string: str, string_set: (<class 'list'>, <class 'pandas.core.series.Series'>, <class 'tuple'>), fix_string_set: bool = False, valid_score: int = 0)
- 为某一字符串从某一集合中匹配相似度最高的元素 - 参数:
- string – 输入的字符串 
- string_set – 要去匹配的集合 
- fix_string_set – 是否修复string_set中的异常数据,使用该选项会降低性能 
- valid_score – 相似度大于该值的才返回 
 
 - Returns: 字符串及相似度组成的列表 
- ricco.util.util.fuzz_pair(ls1, ls2, score=50)
- 模糊配对 
- ricco.util.util.get_city_id_by_name(city: str)
- 获取城市代码 
- ricco.util.util.get_shortest_element(elements: list)
- 获取列表中长度最短的元素 
- ricco.util.util.get_uuid(s)
- 针对格式错误的uuid和空白值生成新的uuid 
- ricco.util.util.house_type_format(x)
- 通过正则表达式将户型统一修改为1房,2房···5房及以上,目前只支持9室以下户型, 其中5室及以上的类别为“5房及以上” 
- ricco.util.util.interchange_dict(dic: dict) dict
- 将字典的key和value互换 
- ricco.util.util.is_digit(x) bool
- 判断一个值是否能通过float方法转为数值型 
- ricco.util.util.is_hex(string) bool
- 判断一个字符串是否是十六进制格式 
- ricco.util.util.is_unique_series(df: ~pandas.core.frame.DataFrame, key_cols: (<class 'str'>, <class 'list'>) = None, ignore_na=False)
- 判断Dataframe中的某一列或某几列的组合是否唯一 
- ricco.util.util.is_valid_uuid(uuid_to_test, version=4)
- 判断一个字符是否是uuid 
- ricco.util.util.isinstances(values: list, types: (<class 'str'>, <class 'list'>)) bool
- 检查列表内的元素类型是否全部满足多个类型之一 - 参数:
- values – 要检查的值 
- types – 类型类别 
 
 
- ricco.util.util.list2dict(x: list)
- 列表转为字典,key为元素的顺序 
- ricco.util.util.or_(*conditions)
- 对多个条件执行or操作 
- ricco.util.util.per2float(string: str) float
- 带有百分号的数值字符串转小数点形式的数值,没有百分号的返回原值 
- ricco.util.util.physical_age(birthday: datetime, deadline: datetime | None = None)
- 计算周岁,默认按照当前时间点计算 
- ricco.util.util.pinyin(word: str) str
- 将中文转换为汉语拼音 
- ricco.util.util.re_fast(pattern, string, warning=True)
- 根据正则表达式快速提取匹配到的第一个 
- ricco.util.util.re_multi(compiles: list, string)
- 根据多个正则表达式提取匹配到的所有值 - 参数:
- compiles – 经过re.compile 处理过后的正则表达式组成的列表 
- string – 要提取的字符串 
 
 
- ricco.util.util.relstrip(string, kwd)
- 通过正则表达式删除左侧字符串 
- ricco.util.util.remove_null_in_dict(dic: dict) dict
- 将字典中值为空的元素删掉 
- ricco.util.util.rerstrip(string, kwd)
- 通过正则表达式删除右侧字符串 
- ricco.util.util.rstrip_d0(x)
- 删除末尾的‘.0’,并转为str格式,适用于对手机号等场景,如:’130.0’ -> ‘130’ 
- ricco.util.util.segment(x: (<class 'int'>, <class 'float'>), gap: (<class 'list'>, <class 'tuple'>, <class 'set'>, <class 'float'>, <class 'int'>), sep: str = '-', unit: str = '', bottom: str = '以下', top: str = '以上') str
- 区间段划分工具 - 参数:
- x – 数值 
- gap – 间隔,固定间隔或列表 
- unit – 单位,末尾 
- sep – 分隔符,中间 
- bottom – 默认为“以下”:80米以下 
- top – 默认为“以上”:100米以上 
 
- 返回:
- 区间段 ‘num1分隔符num2单位’:‘80-100米’ 
 
- ricco.util.util.sort_by_list(src_list, by_list, filter_=False) list
- 根据一个列表对另一个列表进行筛选或排序,参照列表中不存在的元素按照原始顺序排列在后 - 参数:
- src_list – 要进行排序的列表 
- by_list – 参照的列表 
- filter – 是否根据参照列表筛选 
 
 - 示例 - >>> a = [1, 2, 3, 4, 5] >>> b = [2, 5, 4, 1] >>> sort_by_list(a, b) [2, 5, 4, 1, 3] >>> sort_by_list(a, b, filter_=True) [2, 5, 4, 1] >>> sort_by_list(b, a) [1, 2, 4, 5] 
- ricco.util.util.to_bool(x, na=False, other=False, t_list: list | None = None, f_list: list | None = None)
- 将常见的布尔类型的代替值转为布尔类型 - 参数:
- x – 输入值 
- na – 空值返回真还是假 
- other – 无法判断的值如何处理 - ‘raise’:抛出异常 - ‘coerce’:返回传入的值 - 除 ‘raise’ 和 ‘coerce’ 之外的其他值:直接返回该值 
- t_list – 指定为True的类别 
- f_list – 指定为False的类别 
 
 
- ricco.util.util.to_float(string, rex_method: str = 'mean', ignore_pct: bool = False, multi_warning=True)
- 字符串转换为float 
- ricco.util.util.to_json_string(string, errors='raise')
- 将字符串转为json格式的字符串 
- ricco.util.util.to_str_list(series: (<class 'list'>, <class 'pandas.core.series.Series'>, <class 'tuple'>)) list
- 将列表中的元素保留为字符串、唯一、非空 
- ricco.util.util.union_list_v2(*lists) list
- 合并列表 - 示例 - >>> a = [1] >>> b = [2, 3] >>> union_list_v2(a, b) [1, 2, 3] 
- ricco.util.util.union_str_v2(*strings, sep='') str
- 连接字符串,空白字符串会被忽略 - 参数:
- *strings – 要连接字符串,依次传入 
- sep – 连接符,默认为空白字符串 
 
 - 示例 - >>> union_str_v2('a', 'b', sep='-') 'a-b' >>> union_str_v2('a', 'b', 'c') 'abc' 
时间和日期
Classes:
| 
 | DT日期类 | 
| 
 | 
Functions:
| 
 | 自动检查格式并输出日期 | 
| 
 | excel的数字样式时间格式转日期格式 | 
| 
 | 自动判断日期格式 | 
| 
 | 判断是否是一个有效的日期字符串 | 
| 
 | 将日期转为字符串的装饰器 | 
- class ricco.util.dt.DT(date: (<class 'str'>, <class 'datetime.date'>, <class 'datetime.datetime'>) = None, format='%Y-%m-%d', dst_format=None)
- 基类: - object- DT日期类 - 参数:
- date – 初始化支持字符串、datetime.date和datetime.datetime格式作为基准日期。不指定时,默认基准日期今天。 
- format – 当初始化为字符串时,需要输入format指定日期字符串格式。 
- dst_format – 可选。未指定时,类方法输出结果为datetime.date日期格式。指定dst_format时,输出结果为符合dst_format的字符串格式。 
 
 - Methods: - date_move([years, months, days])- 基于当前日期移动日期 - Attributes: - 半年前 - 本月第一天 - 本月最后一天 - 本周一 - 一年前 - 后天 - 前天 - 今天 - 明天 - 昨天 - date_move(years=0, months=0, days=0)
- 基于当前日期移动日期 
 - property day_half_year_ago
- 半年前 
 - property first_day_of_this_month
- 本月第一天 
 - property last_day_of_this_month
- 本月最后一天 
 - property monday_of_this_week
- 本周一 
 - property one_year_ago
- 一年前 
 - property the_day_after_tomorrow
- 后天 
 - property the_day_before_yesterday
- 前天 
 - property today
- 今天 
 - property tomorrow
- 明天 
 - property yesterday
- 昨天 
 
- class ricco.util.dt.DT2(date: (<class 'str'>, <class 'datetime.date'>, <class 'datetime.datetime'>) = None, date_format='%Y-%m-%d')
- 基类: - object- Methods: - date_move([years, months, days])- 移动任意年/月/日后的日期,移动数量为正数表示向后移动,负数表示向前移动 - get([format])- 指定format,输出符合format格式的字符串,否则输出datetime.date类实例 - Attributes: - 半年前的今天 - 本月第一天 - 本月最后一天 - 本周的星期一 - 一年前的今天 - 后天 - 前天 - 今天 - 明天 - 昨天 - date_move(years=0, months=0, days=0)
- 移动任意年/月/日后的日期,移动数量为正数表示向后移动,负数表示向前移动 
 - property day_half_year_ago
- 半年前的今天 
 - property first_day_of_this_month
- 本月第一天 
 - get(format=None)
- 指定format,输出符合format格式的字符串,否则输出datetime.date类实例 
 - property last_day_of_this_month
- 本月最后一天 
 - property monday_of_this_week
- 本周的星期一 
 - property one_year_ago
- 一年前的今天 
 - property the_day_after_tomorrow
- 后天 
 - property the_day_before_yesterday
- 前天 
 - property today
- 今天 
 - property tomorrow
- 明天 
 - property yesterday
- 昨天 
 
- ricco.util.dt.auto2date(string, errors='ignore')
- 自动检查格式并输出日期 
- ricco.util.dt.excel2date(dates, date_type='str')
- excel的数字样式时间格式转日期格式 - 参数:
- dates – 传入excel的日期格式,或ymd的日期格式 
- date_type – 返回日期类型,str or date 
 
 
- ricco.util.dt.infer_format(string) str
- 自动判断日期格式 
- ricco.util.dt.is_valid_date(string, na=False)
- 判断是否是一个有效的日期字符串 
- ricco.util.dt.to_str(func)
- 将日期转为字符串的装饰器 
文件路径
Functions:
| 
 | 统计文件夹中文件的数量 | 
| 
 | 压缩文件夹 | 
| 
 | 文件夹中的文件路径生成器,用于遍历文件夹中的文件 | 
| 
 | 文件夹中的文件路径列表 | 
| 
 | 确保路径为文件夹格式(以斜杠“/”结尾) | 
| 
 | 确保目录存在,不存在则创建 | 
| 
 | 获取文件扩展名 | 
| 
 | 获取文件扩展名 | 
| 
 | 将一个文件压缩为zip格式 | 
| 
 | 路径及文件名(不含扩展名) | 
| 
 | 获取文件大小 | 
| 
 | 判断文件是否在某个时间段内修改过 | 
| 
 | 移动文件并保留元数据 | 
| 
 | 路径及文件名(不含扩展名) | 
| 
 | 检查路径是否为系统目录 | 
| 
 | 删除文件夹中的.DS_Store文件 | 
| 
 | 删除文件或文件夹 | 
| 
 | 删除指定天数前修改过的文件 | 
| 
 | 获取文件列表中所有文件的扩展名,如果只有一个则返回该扩展名 | 
| 
 | 将文件路径拆分为文件夹路径、文件名、扩展名三部分 | 
- ricco.util.os.count_files(dir_path)
- 统计文件夹中文件的数量 
- ricco.util.os.dir2zip(dir_path, overwrite=False, delete_origin=False)
- 压缩文件夹 - 参数:
- dir_path – 文件夹路径 
- overwrite – 是否覆盖已有文件 
- delete_origin – 是否删除原文件 
 
 
- ricco.util.os.dir_iter(dir_path, exts: (<class 'list'>, <class 'str'>) = None, abspath=False, recursive=False, ignore_hidden_files=True)
- 文件夹中的文件路径生成器,用于遍历文件夹中的文件 - 参数:
- dir_path – 文件目录 
- exts – 文件扩展名,不指定则返回所有文件 
- abspath – 是否返回绝对路径 
- recursive – 是否循环遍历更深层级的文件,默认只返回当前目录下的文件 
- ignore_hidden_files – 是否忽略隐藏文件 
 
 
- ricco.util.os.dir_iter_list(dir_path, exts: (<class 'list'>, <class 'str'>) = None, abspath=False, recursive=False, reverse=False)
- 文件夹中的文件路径列表 - 参数:
- dir_path – 文件目录 
- exts – 文件扩展名,不指定则返回所有文件 
- abspath – 是否返回绝对路径 
- recursive – 是否循环遍历更深层级的文件,默认只返回当前目录下的文件 
- reverse – 路径列表是否倒序 
 
 
- ricco.util.os.ensure_dir(dirpath: str)
- 确保路径为文件夹格式(以斜杠“/”结尾) 
- ricco.util.os.ensure_dirpath_exist(filepath)
- 确保目录存在,不存在则创建 
- ricco.util.os.ext(filepath)
- 获取文件扩展名 
- ricco.util.os.extension(filepath)
- 获取文件扩展名 
- ricco.util.os.file2zip(filepath, overwrite=False, delete_origin=False)
- 将一个文件压缩为zip格式 
- ricco.util.os.fn(filepath)
- 路径及文件名(不含扩展名) 
- ricco.util.os.getsize(filepath)
- 获取文件大小 
- ricco.util.os.is_using_in(filepath, hours)
- 判断文件是否在某个时间段内修改过 
- ricco.util.os.move_file_with_metadata(src, dst)
- 移动文件并保留元数据 
- ricco.util.os.path_name(filepath)
- 路径及文件名(不含扩展名) 
- ricco.util.os.protect_dir(path)
- 检查路径是否为系统目录 
- ricco.util.os.remove_ds_store(dir_path)
- 删除文件夹中的.DS_Store文件 
- ricco.util.os.remove_path(path, log=True)
- 删除文件或文件夹 
- ricco.util.os.rm_scratch_file(dir_path, days, recursive=False, rm_hidden_file=False, exts=None)
- 删除指定天数前修改过的文件 
- ricco.util.os.single_ext(path_list)
- 获取文件列表中所有文件的扩展名,如果只有一个则返回该扩展名 
- ricco.util.os.split_path(filepath, abspath=False)
- 将文件路径拆分为文件夹路径、文件名、扩展名三部分 
字符串处理
Functions:
| 
 | 迭代生成长度为n的字符串 | 
| 
 | 删除连续重复的字符串,按照step从大到小删除重复字符,返回去重后最短的字符串 | 
| 
 | 根据指定的小块长度,获取去重后的字符串 | 
| 
 | 使用常见的分隔符将字符串拆分为列表 | 
| 
 | 从字符串中提取城市(可能包含县级市) | 
| 
 | 产业地址清洗代码, 该部分地址主要用于Geocoding,清洗到“xx路xx号即可”, 过于详细的地址会导致Geocoding的准确率下降,过长的地址也会导致准确率下降 | 
| 
 | 通过长度和步长获所有可能的取端点列表的列表 . | 
| 
 | 按照位置信息将字符串拆解为多个字符串的列表 :param string: 需要拆分的字符串 :param breaks: 位置集合列表的列表(左闭右开),[[1, 5], [5, 10], [10, 15]] | 
| 
 | 获取单个起点的位置端点列表,如果起始位置不是零,则会返回0到起始位置的列表 :param start: 起始位置 :param length: 总长度 :param step: 步长 | 
| 
 | 检查字符串是否包含至少一个中文字符 | 
| 
 | 检查输入是重复字符串组成的字符串 | 
| 
 | 判断一个全部为数字的字符串是否含有连续n个递增或递减1的数字 | 
| 
 | 删除列表中连续重复的元素,并拼接成字符串 | 
| 
 | 将英文标点符号替换为中文标点符号 | 
| 
 | 删除特殊字符 | 
- ricco.util.strings.cyclic_slice(s, n=5)
- 迭代生成长度为n的字符串 
- ricco.util.strings.drop_repeat_string(string, min_length=3, max_length=None)
- 删除连续重复的字符串,按照step从大到小删除重复字符,返回去重后最短的字符串 - 参数:
- string – 要处理的字符串 
- min_length – 识别的最短长度,默认为3 
- max_length – 识别的最长长度,默认不限制 
 
 - 示例 - >>> drop_repeat_string('上海市上海市杨浦区') '上海市杨浦区' 
- ricco.util.strings.drop_repeat_string_by_step(string, step)
- 根据指定的小块长度,获取去重后的字符串 
- ricco.util.strings.easy_split(string: str, seps: list = None, extra_seps: list = None)
- 使用常见的分隔符将字符串拆分为列表 - 参数:
- string – 
- seps – 自定义分隔符 
- extra_seps – 额外的分隔符 
 
 
- ricco.util.strings.extract_city(string: str, na=None)
- 从字符串中提取城市(可能包含县级市) 
- ricco.util.strings.format_industry_addr(addr: str)
- 产业地址清洗代码, 该部分地址主要用于Geocoding,清洗到“xx路xx号即可”, 过于详细的地址会导致Geocoding的准确率下降,过长的地址也会导致准确率下降 
- ricco.util.strings.get_breaks(length, step)
- 通过长度和步长获所有可能的取端点列表的列表 .. rubric:: 示例 - >>> get_breaks(10, 3) == [ >>> [[0, 3], [3, 6], [6, 9], [9, 10]], >>> [[0, 1], [1, 4], [4, 7], [7, 10]], >>> [[0, 2], [2, 5], [5, 8], [8, 10]] >>> ] 
- ricco.util.strings.get_list_by_position(string: str, breaks: list)
- 按照位置信息将字符串拆解为多个字符串的列表 :param string: 需要拆分的字符串 :param breaks: 位置集合列表的列表(左闭右开),[[1, 5], [5, 10], [10, 15]] 
- ricco.util.strings.get_single_list(start, length, step)
- 获取单个起点的位置端点列表,如果起始位置不是零,则会返回0到起始位置的列表 :param start: 起始位置 :param length: 总长度 :param step: 步长 - 示例 - >>> get_single_list(0, 7, 3) == [[0, 3], [3, 6], [6, 7]] >>> get_single_list(1, 7, 3) == [[0, 1], [1, 4], [4, 7]] 
- ricco.util.strings.has_chinese(text)
- 检查字符串是否包含至少一个中文字符 
- ricco.util.strings.is_repeated(string, min_length: int = 1)
- 检查输入是重复字符串组成的字符串 
- ricco.util.strings.is_seq(num_str: str, n: int)
- 判断一个全部为数字的字符串是否含有连续n个递增或递减1的数字 
- ricco.util.strings.join_unique(strs: list)
- 删除列表中连续重复的元素,并拼接成字符串 
- ricco.util.strings.punctuation_en2cn(text: str)
- 将英文标点符号替换为中文标点符号 
- ricco.util.strings.remove_control_chars(text)
- 删除特殊字符 
数据校验
Functions:
| 
 | 检查列是否存在 | 
| 
 | 校验是否存在空白字符串 | 
| 
 | 检查是否非空(空白字符串认为是空值) | 
| 
 | 检查一列是否可以转为数值型 | 
| 
 | 检查并输出符合正则表达式pattern的值 | 
| 
 | 检查并输出重复项 | 
| 
 | 检查values是否是superset的子集 | 
| 
 | 检查Dataframe中某一列的值是否在指定的值的范围内 | 
| 
 | 
- ricco.util.assertion.assert_columns_exists(df: DataFrame, columns: list)
- 检查列是否存在 
- ricco.util.assertion.assert_not_empty_str(df: DataFrame, col: str, skip_if_not_exists: bool = True)
- 校验是否存在空白字符串 
- ricco.util.assertion.assert_not_null(df: DataFrame, col: str, skip_if_not_exists: bool = True)
- 检查是否非空(空白字符串认为是空值) 
- ricco.util.assertion.assert_series_digit(df: DataFrame, col: str)
- 检查一列是否可以转为数值型 
- ricco.util.assertion.assert_series_not_like(df: DataFrame, col: str, pattern)
- 检查并输出符合正则表达式pattern的值 
- ricco.util.assertion.assert_series_unique(df: ~pandas.core.frame.DataFrame, columns: (<class 'str'>, <class 'list'>) = '名称', text: str = '', ignore_na=False)
- 检查并输出重复项 - 参数:
- df – 要检查的Dataframe 
- columns – 唯一的列 
- text – 输出的文案 
- ignore_na – 是否忽略空值,默认False,为True时,有空值的行不参与校验 
 
 
- ricco.util.assertion.assert_subset(values: (<class 'list'>, <class 'set'>, <class 'tuple'>), superset: (<class 'list'>, <class 'set'>, <class 'tuple'>))
- 检查values是否是superset的子集 
- ricco.util.assertion.assert_values_in(df: ~pandas.core.frame.DataFrame, col: str, enums: (<class 'dict'>, <class 'list'>), skip_if_not_exists: bool = True)
- 检查Dataframe中某一列的值是否在指定的值的范围内 - 参数:
- df – 要检查的dataframe 
- col – 列名 
- enums – 指定的enum值,当传入dict时,包含在key和value中的值都通过 
- skip_if_not_exists – 当列不存在时是否跳过 
 
 
- ricco.util.assertion.skip_column(df: DataFrame, col: str, skip_if_not_exists: bool = True)
行政区划工具
Classes:
| 
 | 
Functions:
| 
 | 构建前缀树 | 
| 全称和简称的映射关系 | |
| 城市id和城市名称的映射关系 | |
| 简称和全称的映射关系 | |
| 城市名称和城市id的映射关系 | |
| 
 | 输入城市或区县,返回城市 | 
| 
 | 从字符串中提取城市(可能包含县级市) | 
| 
 | 从字符串中获取全部的城市名称的简称列表 | 
| 
 | 从字符串中获取全部的区县名称的简称列表 | 
| 
 | 从字符串中提取城市、区县 | 
| 
 | 根据城市名称获取城市id | 
| 
 | 根据城市id获取城市名称 | 
| 
 | 从bd_region表中提取某个城市的区县数据,并处理成可以上传的格式 | 
| 
 | 从bd_region表中提取某个城市的街道数据,并处理成可以上传的格式 | 
| 
 | 处理多个值的情况 :param ls: 列表 :param action: 处理方式,可选值:'raise', 'first', 'last', 'coerce', 'all' :param warning: 是否打印警告 | 
| 
 | 是否是城市 | 
| 
 | 是否是区县 | 
| 
 | 标准化城市名称为简称或全称 | 
| 区县名称和城市简称的映射关系,仅保留一对一的关系 | |
| 区县简称和城市简称的映射关系,仅保留一对一的关系 | 
- class ricco.util.district.District
- 基类: - object- Methods: - city(name[, if_not_unique, warning])- 通过地名(城市、区县)获取所在的城市名称 - city_names(name)- 返回匹配到的全部城市名称列表 - get_city_id_by_name(name[, warning])- 通过城市名称获取城市id - get_city_name_by_id(city_id[, full, warning])- 通过城市id获取城市名称 - is_city(name)- 判断是否是地级市 - is_region(name)- 判断是否是县市区 - province(name[, if_not_unique, warning])- 通过地名(省份、城市、区县)获取所在的省份名称 - province_names(name)- 返回匹配到的全部省份名称列表 - Attributes: - 全部城市(全程+简称)列表 - 全部区县(全程+简称)列表 - city(name: str, if_not_unique: str = 'coerce', warning: bool = True)
- 通过地名(城市、区县)获取所在的城市名称 - 参数:
- name – 城市名称 
- if_not_unique – 当查询到多个结果如何处理, - None, 默认, 返回空值 - ‘first’, 返回第一个 - ‘last’, 返回最后一个 - ‘all’, 返回所有城市的列表 
- warning – 是否打印警告 
 
 
 - property city_list
- 全部城市(全程+简称)列表 
 - city_names(name: str)
- 返回匹配到的全部城市名称列表 
 - static get_city_id_by_name(name: str, warning=True)
- 通过城市名称获取城市id 
 - static get_city_name_by_id(city_id: int, full=False, warning=False)
- 通过城市id获取城市名称 
 - static is_city(name: str) bool
- 判断是否是地级市 
 - static is_region(name: str) bool
- 判断是否是县市区 
 - province(name, if_not_unique='coerce', warning=True)
- 通过地名(省份、城市、区县)获取所在的省份名称 - 参数:
- name – 地名 
- if_not_unique – 当查询到多个结果如何处理, - None, 默认, 返回空值 - first, 返回第一个 - last, 返回最后一个 - ‘all’, 返回所有省份的列表 
- warning – 是否打印警告 
 
 
 - province_names(name: str)
- 返回匹配到的全部省份名称列表 
 - property region_list
- 全部区县(全程+简称)列表 
 
- ricco.util.district.build_automaton(ls)
- 构建前缀树 
- ricco.util.district.build_city()
- ricco.util.district.build_region()
- ricco.util.district.city_full_short_mapping()
- 全称和简称的映射关系 
- ricco.util.district.city_id_shortname_mapping()
- 城市id和城市名称的映射关系 
- ricco.util.district.city_short_full_mapping()
- 简称和全称的映射关系 
- ricco.util.district.city_shortname_id_mapping()
- 城市名称和城市id的映射关系 
- ricco.util.district.ensure_city_name(name, full=False, warning=False)
- 输入城市或区县,返回城市 
- ricco.util.district.extract_city(string: str, na=None)
- 从字符串中提取城市(可能包含县级市) 
- ricco.util.district.find_cities(text)
- 从字符串中获取全部的城市名称的简称列表 
- ricco.util.district.find_regions(text)
- 从字符串中获取全部的区县名称的简称列表 
- ricco.util.district.get_city_and_region(string) tuple
- 从字符串中提取城市、区县 
- ricco.util.district.get_city_id_by_name(name: str, warning=True)
- 根据城市名称获取城市id 
- ricco.util.district.get_city_name_by_id(city_id: (<class 'str'>, <class 'int'>), full=False, warning=False)
- 根据城市id获取城市名称 
- ricco.util.district.get_upload_region(df, city)
- 从bd_region表中提取某个城市的区县数据,并处理成可以上传的格式 
- ricco.util.district.get_upload_street(df, city)
- 从bd_region表中提取某个城市的街道数据,并处理成可以上传的格式 
- ricco.util.district.if_many_value(ls, action='raise', warning=False)
- 处理多个值的情况 :param ls: 列表 :param action: 处理方式,可选值:’raise’, ‘first’, ‘last’, ‘coerce’, ‘all’ :param warning: 是否打印警告 
- ricco.util.district.is_city(name)
- 是否是城市 
- ricco.util.district.is_region(name)
- 是否是区县 
- ricco.util.district.norm_city_name(name, full=False, warning=False)
- 标准化城市名称为简称或全称 
- ricco.util.district.region_full_city_mapping()
- 区县名称和城市简称的映射关系,仅保留一对一的关系 
- ricco.util.district.region_short_city_mapping()
- 区县简称和城市简称的映射关系,仅保留一对一的关系 
Functions:
| 
 | 根据邮编获取城市名称 | 
| 获取邮编与城市名称的映射关系 | 
- ricco.util.postcode.get_city_from_postcode(postcode: str, full=False, warning=False)
- 根据邮编获取城市名称 - 参数:
- postcode – 邮编 
- full – 是否返回全称 
- warning – 是否打印警告 
 
 
- ricco.util.postcode.postcode_city_mapping()
- 获取邮编与城市名称的映射关系 
随机工具
Functions:
| 
 | 随机生成经纬度 | 
| 
 | 根据概率生成随机值 | 
| 获取随机日期 | |
| 随机生成中文名字,仅生成2或3字名字 | |
| 
 | 生成随机的房间号 | 
- ricco.util.random.ramdom_lnglat(df: ~pandas.core.frame.DataFrame, lng_range: (<class 'tuple'>, <class 'list'>) = (72, 138), lat_range: (<class 'tuple'>, <class 'list'>) = (0, 56))
- 随机生成经纬度 - 参数:
- df – 输入的dataframe 
- lng_range – 城市的经度范围 
- lat_range – 城市的纬度范围 
 
 
- ricco.util.random.random_by_prob(mapping: dict)
- 根据概率生成随机值 
- ricco.util.random.random_date()
- 获取随机日期 
- ricco.util.random.random_name()
- 随机生成中文名字,仅生成2或3字名字 
- ricco.util.random.random_room_number(unit=False)
- 生成随机的房间号 
Kdtree
Functions:
| 
 | 通过距离列表筛选出距离小于r的点的位置 | 
| 
 | 筛选列表中的列表的前limit个元素 | 
| 
 | 使用kdtree查询最近点 | 
| 
 | 使用kdtree查询最近的一个或多个点 | 
| 
 | 使用kdtree查询半径为r的点 | 
- ricco.util.kdtree.filter_by_dist(ind, dist, r)
- 通过距离列表筛选出距离小于r的点的位置 
- ricco.util.kdtree.filter_by_limit(ls, n: int)
- 筛选列表中的列表的前limit个元素 
- ricco.util.kdtree.kdtree_nearest(xy_tree, xy_query, limit: int | None = None, r: float | None = None, leaf_size=2)
- 使用kdtree查询最近点 
- ricco.util.kdtree.kdtree_query(xy_tree, xy_query, limit: int = None, r=None, leaf_size=2)
- 使用kdtree查询最近的一个或多个点 - 参数:
- xy_tree – 要构造数的点集 
- xy_query – 查询的点集 
- limit – 数量限制 
- r – 半径限制 
- leaf_size – kdtree叶子节点的大小 
 
 
- ricco.util.kdtree.kdtree_query_radius(xy_tree, xy_query, r, limit: int = None, leaf_size=2)
- 使用kdtree查询半径为r的点 - 参数:
- xy_tree – 要构造数的点集 
- xy_query – 查询的点集 
- r – 查询半径 
- limit – 数量限制 
- leaf_size – kdtree叶子节点的大小 
 
 
Word文档处理
Classes:
| 
 | 
- class ricco.util.docx.Docx
- 基类: - object- Methods: - add_bullet_list(text)- 添加无序列表 - add_hist_from_data(data[, newline])- 通过数据生成并添加直方图 - add_intense_quote(text)- 添加高亮段落 - add_normal_p(text)- 添加普通段落 - add_order_list(text)- 添加有序列表 - add_paragraph_color(text, rgb)- 添加自定义颜色的段落 - add_paragraph_red(text)- 添加红色字体的段落 - add_table_from_df(df[, newline])- 将dataframe作为表格写入 - add_title(text, n)- 添加标题 - add_title_0(text)- 添加大标题 - add_title_1(text)- 添加一级标题 - add_title_2(text)- 添加二级标题 - add_title_3(text)- 添加三级标题 - add_title_4(text)- 添加四级标题 - save(file_path)- 保存文件至word文档 - 格式初始化 - add_bullet_list(text: str)
- 添加无序列表 
 - add_hist_from_data(data: list, newline=False)
- 通过数据生成并添加直方图 
 - add_intense_quote(text: str)
- 添加高亮段落 
 - add_normal_p(text: str)
- 添加普通段落 
 - add_order_list(text: str)
- 添加有序列表 
 - add_paragraph_color(text: str, rgb: (<class 'list'>, <class 'tuple'>))
- 添加自定义颜色的段落 
 - add_paragraph_red(text: str)
- 添加红色字体的段落 
 - add_table_from_df(df: DataFrame, newline=False)
- 将dataframe作为表格写入 
 - add_title(text: str, n: int)
- 添加标题 
 - add_title_0(text: str)
- 添加大标题 
 - add_title_1(text: str)
- 添加一级标题 
 - add_title_2(text: str)
- 添加二级标题 
 - add_title_3(text: str)
- 添加三级标题 
 - add_title_4(text: str)
- 添加四级标题 
 - save(file_path: str)
- 保存文件至word文档 
 - set_default_style()
- 格式初始化 
 
多媒体文件处理
Functions:
| 
 | 获取MP3文件中的元数据信息 | 
- ricco.util.media.get_mp3_metadata(file_path)
- 获取MP3文件中的元数据信息