轩小陌的Python笔记-day15 内置模块(剩余)和开发规范

本文介绍了Python内置模块中的json、time和datetime,包括它们的核心功能、类型要求和其他功能。此外,还详细讲解了正则表达式的基础概念和re模块的使用,如findall、match、search等方法。最后,探讨了Python项目开发规范,如单文件应用、单可执行文件和多可执行文件的组织结构。
摘要由CSDN通过智能技术生成

day15 内置模块和开发规范

在这里插入图片描述

目标:掌握常见的内置模块的使用及了解软件开发的规范。

今日概要:

  • 内置模块
    • json
    • time
    • datetime
    • re
  • 开发规范
    • 主文件
    • 配置文件
    • 数据
    • 附件
    • 业务代码

1. 内置模块

1.1 json

json模块:是 python 内部的一个模块,可以将 python 的数据格式转换为 json 格式的数据,也可以将 json 格式的数据转换为 python 的数据格式。

json 格式:是一个数据格式(本质上就是个字符串,常用于网络数据传输)

# Python中的数据类型的格式
data = [
    {
   "id": 1, "name": "轩小陌", "age": 18},
    {
   "id": 2, "name": "alex", "age": 18},
    ('xuanxiaomo',123),
]

# JSON格式
value = '[{"id": 1, "name": "轩小陌", "age": 18}, {"id": 2, "name": "alex", "age": 18},["xuanxiaomo",123]]'
1.1.1 核心功能

json格式用于跨语言数据传输,例如:A系统用Python开发,有列表类型和字典类型等。B系统用Java开发,有数组、map等的类型。语言不同,基础数据类型格式都不同。

为了方便数据传输,大家约定一个格式:json 格式,每种语言都可以将自己数据类型转换为 json 格式,也可以将 json 格式的数据转换为各自语言的数据类型。

在这里插入图片描述

Python 数据类型与 json 格式的相互转换:

  • 数据类型 -> json ,一般称为:序列化

    import json
    
    data = [
        {
         "id": 1, "name": "轩小陌", "age": 18},
        {
         "id": 2, "name": "alex", "age": 18},
    ]
    
    res = json.dumps(data)
    print(res) 
    >>输出结果:
    [{
         "id": 1, "name": "\u8f69\u5c0f\u964c", "age": 18}, {
         "id": 2, "name": "alex", "age": 18}]
    
    res = json.dumps(data, ensure_ascii=False)
    print(res) 
    >>输出结果:
    [{
         "id": 1, "name": "轩小陌", "age": 18}, {
         "id": 2, "name": "alex", "age": 18}]
    
  • json格式 -> 数据类型,一般称为:反序列化

    import json
    
    data_string = '[{"id": 1, "name": "轩小陌", "age": 18}, {"id": 2, "name": "alex", "age": 18}]'
    
    data_list = json.loads(data_string)
    print(data_list)
    >>输出结果:
    [{
         'id': 1, 'name': '轩小陌', 'age': 18}, {
         'id': 2, 'name': 'alex', 'age': 18}]
    

练习题

  1. 写网站,给用户返回 json 格式数据

    • 安装 flask 模块,协助我们快速写网站:

      pip3 install flask
      
    • 使用flask写网站

      import json
      from flask import Flask
      
      app = Flask(__name__)
      
      def index():
          return "首页"
      
      def users():
          data = [
              {
             "id": 1, "name": "武沛齐", "age": 18},
              {
             "id": 2, "name": "alex", "age": 18},
          ]
          return json.dumps(data)
      
      app.add_url_rule('/index/', view_func=index, endpoint='index')
      app.add_url_rule('/users/', view_func=users, endpoint='users')
      
      if __name__ == '__main__':
          app.run()
      
  2. 发送网络请求,获取 json 格式数据并处理。

    import json
    import requests
    
    url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=5&page_start=20"
    
    res = requests.get(
        url=url,
        headers={
         
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
        }
    )
    
    # 获取json格式的数据:
    print(res.text)
    
    # 将json格式转换为python数据类型:
    data_dict = json.loads(res.text)
    print(data_dict)
    
1.1.2 类型要求

python的数据类型转换为 json 格式,对数据类型是有要求的,默认只支持:

    +-------------------+---------------+
    | Python数据类型     | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+
data = [
    {
   "id": 1, "name": "轩小陌", "age": 18},
    {
   "id": 2, "name": "alex", "age": 18},
]

其他类型如果想要支持,需要自定义JSONEncoder 才能实现【目前只需要了解大概意思即可,以后项目开发中用到了还会详细讲解。】,例如:

import json
from decimal import Decimal
from datetime import datetime

data = [
    {
   "id": 1, "name": "轩小陌", "age": 18, 'size': Decimal("18.99"), 'ctime': datetime.now()},
    {
   "id": 2, "name": "alex", "age": 18, 'size': Decimal("9.99"), 'ctime': datetime.now()},
]

# 定义一个MyJSONEncoder类,继承JSONEncoder类:
class MyJSONEncoder(json.JSONEncoder):
    def default(self, o):
        # 新增条件判断:当数据类型为Decimal和datetime时,分别进行特殊处理:
        if type(o) == Decimal:
            return str(o)
        elif type(o) == datetime:
            return o.strftime("%Y-%M-%d")
        # 对于其他常规数据类型,仍然按原类中的处理方式:
        return super().default(o)

res = json.dumps(data, cls=MyJSONEncoder)
print(res)
1.1.3 其他功能

json模块中常用的是:

  • json.dump,将数据序列化并写入文件(不常用)

    import json
    
    data 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值