python内置模块json、datetime(超详细)

目录

Day15:内置模块和开发规范(一)

15.1 json

15.1.1 类型要求

15.1.2 其他功能

15.2 时间处理

15.2.1 time

15.2.2 datetime


Day15:内置模块和开发规范(一)

15.1 json

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

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": "\u6b66\u6c9b\u9f50", "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)

json格式,示例和应用

  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)

15.1.1 类型要求

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": "嫂子", "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()},
]
​
​
class MyJSONEncoder(json.JSONEncoder):
    def default(self, o):
        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)

15.1.2 其他功能

json模块中常用的是:

  • json.dumps,序列化生成一个字符串。

  • json.loads,发序列化生成python数据类型。

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

    import json
    ​
    data = [
        {"id": 1, "name": "大烧饼", "age": 18},
        {"id": 2, "name": "alex", "age": 18},
    ]
    ​
    file_object = open('xxx.json', mode='w', encoding='utf-8')
    ​
    json.dump(data, file_object)
    ​
    file_object.close()

  • json.load,读取文件中的数据并反序列化为python的数据类型(不常用)

    import json
    ​
    file_object = open('xxx.json', mode='r', encoding='utf-8')
    ​
    data = json.load(file_object)
    print(data)
    ​
    file_object.close()

15.2 时间处理

  • UTC/GMT:世界时间

  • 本地时间:本地时区的时间。

Python中关于时间处理的模块有两个,分别是time和datetime

15.2.1 time

import time
​
# 获取当前时间戳(自1970-1-1 00:00)
v1 = time.time()
print(v1)
​
# 时区
v2 = time.timezone
​
# 停止n秒,再执行后续的代码。
time.sleep(5)

15.2.2 datetime

在平时开发过程中的时间一般是以为如下三种格式存在:

  • datetime

from datetime import datetime, timezone, timedelta
​
v1 = datetime.now()  # 当前本地时间
print(v1)
​
tz = timezone(timedelta(hours=7))  # 当前东7区时间
v2 = datetime.now(tz)
print(v2)
​
v3 = datetime.utcnow()  # 当前UTC时间
print(v3)
from datetime import datetime, timedelta
​
v1 = datetime.now()
print(v1)
​
# 时间的加减
v2 = v1 + timedelta(days=140, minutes=5)
print(v2)
​
# datetime类型 + timedelta类型
from datetime import datetime, timezone, timedelta
​
v1 = datetime.now()
print(v1)
​
v2 = datetime.utcnow()  # 当前UTC时间
print(v2)
​
# datetime之间相减,计算间隔时间(不能相加)
data = v1 - v2
print(data.days, data.seconds / 60 / 60, data.microseconds)
​
# datetime类型 - datetime类型
# datetime类型 比较 datetime类型
  • 字符串

# 字符串格式的时间  ---> 转换为datetime格式时间
text = "2021-11-11"
v1 = datetime.strptime(text,'%Y-%m-%d') # %Y 年,%m,月份,%d,天。
print(v1)
​
# datetime格式 ----> 转换为字符串格式
v1 = datetime.now()
val = v1.strftime("%Y-%m-%d %H:%M:%S")
print(val)
  • 时间戳

# 时间戳格式 --> 转换为datetime格式
ctime = time.time() # 11213245345.123
v1 = datetime.fromtimestamp(ctime)
print(v1)
​
# datetime格式 ---> 转换为时间戳格式
v1 = datetime.now()
val = v1.timestamp()
print(val)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值