properties数据处理

发布时间 2023-05-17 04:24:28作者: 挖洞404

1、介绍

1.1 数据结构

properties数据指的是一组或多组键值对数据结构,list[list[str, str]]。

二维数组结构,其中一维的元素是长度为2的list,二维的元素是str类型,分别表示键和值。

1.2 场景

在诸多业务场景中,存在使用properties数据的需求。

  • 配置文件
  • 请求和响应头部
  • url的直接参数
  • 请求体部
  • cookies

1.3 函数和类

为了方便处理properties数据,定义相关的函数和类。之所以不直接使用list或dict进行处理,大概以下几点:

  • dict要求键是不可重复的,会自动去重。但是类似响应头部set-cookie字段是需要允许键重复的
  • list的copy是浅复制,但需求一般是深复制。所以需要定义函数和方法
  • dict和list都不强调元素是str类型,而properties函数和类都强调键和值都为str类型
  • 编写函数和类,能够显著的节俭代码,进行复用

2、PropertiesModule

定义了相关的函数

2.1 parse

parse(s, sep1, sep2, strip_flag=False)->list[list[str, str]]
  • 解析字符串为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list
  • s,str类型,待解析字符串
  • sep1,str类型,键值对和键值对之间的分隔符
  • sep2,str类型,键和值之间的分隔符
  • strip_flag,bool类型,为True表示会对键和值进行去除首尾空白字符,即调用.strip()方法
  • 如果s、sep1、sep2任一者为空字符串,则直接返回空list []

2.2 toString

toString(arr, sep1, sep2)->str
  • 将properties数据结构,组装为str类型返回。如果arr长度为0,返回空字符串''
  • arr,为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list
  • sep1,str类型,键值对和键值对之间的分隔符
  • sep2,str类型,键和值之间的分隔符

 2.3 clone

clone(arr) -> list[list[str, str]]
  • 深克隆,即克隆二维的str字面值。而非浅克隆只克隆一维的地址
  • arr,为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list

2.4 hasName

hasName(arr, name, ignore_case) -> bool
  • 判断properties数据结构中是否包含某键,包含则返回bool类型的True
  • arr,为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list
  • name,str类型,待匹配键名称
  • ignore_case,bool类型,是否忽略大小写进行匹配。如果为True,会将各键转小写,以及name转小写进行匹配

2.5 getFirstValue

"""getFirstValue(arr, name, ignore_case) -> str/None"""
"""remove(arr, name, ignore_case)"""
update(arr: list, name: str, value: str, ignore_case: bool):
add(arr: list, name: str, value: str):
"""getNames(arr) -> list"""

3、PropertiesClasses