python常用库之工具库schema(数据验证、数据转换、数据清洗)

schema 模块是一个 Python 库,用于对数据进行验证和处理。它提供了一组简单但强大的工具,可以帮助你验证和转换数据,以确保数据的正确性和一致性。

具体来说,schema 模块可以用于以下几个方面:

  1. 数据验证:schema 可以验证数据是否符合特定的规范。例如,你可以使用 schema 来验证一个字符串是否为有效的电子邮件地址,或者验证一个数字是否在特定的范围内。
  2. 数据转换:schema 可以将数据从一种格式转换为另一种格式。例如,你可以使用 schema 将一个字符串转换为日期格式,或者将一个整数转换为浮点数。
  3. 数据清洗:schema 可以对数据进行清洗和过滤。例如,你可以使用 schema 去除字符串中的空格,或者将一个列表中的重复项删除。

总之,schema 是一个非常有用的工具,可以帮助你验证、转换和清洗数据,让你的代码更加健壮和可靠。

schema安装和使用

pip install schema

  • 表单验证

from schema import Schema, And, Use

# 定义表单数据的 Schema
form_schema = Schema({
    'name': And(str, len),
    'email': And(str, len, str.lower, lambda s: '@' in s),
    'phone': And(str, len, Use(int))
})

# 在 Flask 应用程序中使用表单数据的 Schema 进行验证
@app.route('/submit-form', methods=['POST'])
def submit_form():
    form_data = request.form.to_dict()
    try:
        validated_data = form_schema.validate(form_data)
    except Exception as e:
        return f'Bad Request: {e}'
    # 处理提交的表单数据
    ...

  • REST API 输入验证

from schema import Schema, And

# 定义输入数据的 Schema
input_schema = Schema({
    'username': And(str, len, lambda s: not s.startswith('admin')),
    'password': And(str, len)
})

# 在 Flask 应用程序中使用输入数据的 Schema 进行验证
@app.route('/api/login', methods=['POST'])
def api_login():
    input_data = request.json
    try:
        validated_data = input_schema.validate(input_data)
    except Exception as e:
        return jsonify({'error': str(e)}), 400
    # 处理登录操作
    ...


  • 数据序列化
from schema import Schema, Optional

# 定义数据的 Schema
data_schema = Schema({
    'id': int,
    'name': str,
    Optional('description'): str
})

# 将 JSON 数据转换为 Dict,并进行验证
json_data = '{"id": 1, "name": "Product One", "description": "This is a product."}'
data_dict = data_schema.validate(json.loads(json_data))

# 将 Dict 数据转换为 JSON 字符串,并进行验证
data_dict = {'id': 2, 'name': 'Product Two'}
json_data = json.dumps(data_schema.validate(data_dict))

  • 数据清洗和转换
from schema import Schema, And, Or, Regex

# 定义数据的 Schema,并同时执行清洗和转换操作
data_schema = Schema({
    'name': And(str, lambda s: s.strip().title()),
    'email': And(str, lambda s: s.strip().lower(), Regex(r'^[a-z0-9._]+@[a-z0-9._]+\.[a-z]{2,}$')),
    'phone': Or(None, And(str, lambda s: s.strip(), Regex(r'^\d{11}$'))),
    'gender': Or('male', 'female', 'other', None)
})

# 清洗和转换示例
input_data = {
    'name': '  john DOE  ',
    'email': ' JOhn.Doe@Example.com ',
    'phone': ' 12345678900 ',
    'gender': ''
}
cleaned_data = data_schema.validate(input_data)
# cleaned_data = {'name': 'John Doe', 'email': 'john.doe@example.com', 'phone': '12345678900', 'gender': None}

使用场景

  1. 表单验证:在 Web 应用程序中,用户提交的表单数据需要经过验证后才能被接受。使用 schema 库可以轻松验证表单数据是否符合要求,例如是否必填、是否为有效的邮箱地址等。
  2. REST API 输入验证:在构建 RESTful API 时,输入数据也需要经过验证,以确保数据的正确性和安全性。使用 schema 库可以定义输入数据的 Schema 并对其进行校验,防止恶意攻击和非法数据的输入。
  3. 数据序列化:在将数据从一个格式转换为另一个格式时,需要对数据进行序列化和反序列化操作。使用 schema 库可以定义数据的 Schema,并将数据转换为指定的格式,例如 JSON、XML 等。
  4. 数据清洗和转换:在处理数据时,有时需要对数据进行清洗和转换操作,例如去除空格、转换日期格式等。使用 schema 库可以定义数据的 Schema,并使用验证器执行清洗和转换操作。
06-20 21:21