python常用内置库时间,日期与JSON转换

日期与时间

datetime是Python处理日期和时间的标准库。

from datetime import datetime

if __name__ == "__main__":
    cur_date = datetime.now()
    print(cur_date)
    print(cur_date.year)
    print(cur_date.day)
    print(cur_date.weekday())
    print(cur_date.month)
    print(cur_date.time())

### 结果
2022-03-30 19:47:44.114062
2022
30
2
3
19:47:44.114062

可以用strftime() 格式化日期或时间。

%y 两位数的年份表示(00-99%Y 四位数的年份表示(000-9999%m 月份(01-12%d 月内中的一天(0-31%H 24小时制小时数(0-23%I 12小时制小时数(01-12%M 分钟数(00=59%S 秒(00-59

from datetime import datetime

now = datetime.now()
date= now.strftime("%Y-%m-%d")
print(date)

#### 结果
2022-03-30

base64

Base64是一种用64个字符来表示任意二进制数据的方法。用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。

import base64

a=base64.b64encode(b'hello')


if __name__ == "__main__":
    print(a)

### 结果
b'aGVsbG8='

base64模块提供b64encode()方法将二进制转化为base64,和b64decode()将base64还原为二级制。

将图片转化为base64

image_path = 'C:\\Users\\Desktop\\test2.jpg'
with open(image_path, 'rb') as f:
    image = f.read()
    image_base64 = str(base64.b64encode(image), encoding='utf-8')

base64还原图片

import os,base64 
 
imgdata = base64.b64decode(base64_data)
file = open('1.jpg','wb')
file.write(imgdata)
file.close()

JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,使用 JSON 函数需要导入 json 库:import json
在这里插入图片描述
在这里插入图片描述

json.dumps 用于将 Python 对象编码成 JSON 字符串。

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

在这里插入图片描述

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
在这里插入图片描述

dict转json字符串

import json

# python dict对象
data={"name":"zhansan","age":21,"address":"beijing"}

json_str=json.dumps(data)

print(type(json_str))
# <class 'str'>
print(json_str)
# {"name": "zhansan", "age": 21, "address": "beijing"}

如表格所示的一些常用的对象都可以通过json模块转为str类型,但json作为通用的数据传输格式,一般把其他类型都转化为dict对象在转化为json类型。


# list转str类型
data = ["zhansna","age","address"]
json.dumps(data)
'["zhansna", "age", "address"]'
json_list=json.dumps(data)
print(json_list)
["zhansna", "age", "address"]
print(type(json_list))
<class 'str'>

# 将list转为dict再转化为json格式
data = ["zhansna","age","address"]
list_to_dict=dict.fromkeys(data)
print(list_to_dict)
# {'zhansna': None, 'age': None, 'address': None}
# 再按上面步骤转为json
# dict模块的内置函数formkeys(value)可以将任意可逸代对象转化为dict的key

class转json
python中用处最多的就是类了,json模块也可以将一个类转化为json格式的数据。

# 定义一个Student类
class Student:
    __name = None
    __age = None
    __address = None
    def __init__(self,name,age,address):
        self.__name = name
        self.__age = age
        self.__address = address
    def to_str(self):
        print("Student(name={0},age={1},address={2})".format(self.__name,self.__age,self.__address))

        
student = Student("zhangsan",21,"beijin")
student.to_str()
# Student(name=zhangsan,age=21,address=beijin)
# 类对象是不可以直接转json的
student_json = json.dumps(student)

# 报错
TypeError: Object of type Student is not JSON serializable

很容易想到将类的实例对象转化为dict再转化为json,这是很容易实现的。

# 编写将实例对象转化为dict的函数
'''
注意上面的类的成员变量有访问权限的控制__,因此需要编写setter和getter方法,完整类定义如下:
## 定义类
class Student:
    __name = None
    __age = None
    __address = None
    def __init__(self,name,age,address):
        self.__name = name
        self.__age = age
        self.__address = address
    def to_str(self):
        print("Student(name={0},age={1},address={2})".format(self.__name,self.__age,self.__address))

    def __getattr__(self,item):
        if item == "name":
            return self.__name
        if item == "age":
            return self.__age
        if item == "address":
            return self.__address

    def __setattr__(self,item,value):
        return object.__setattr__(self,item,value)

    def to_str(self):
        print("Student(name={0},age={1},address={2})".format(self.__name,self.__age,self.__address))


'''

## 定义类转化为dict的函数
def Student_to_dict(object):
    return {
                'name':object.__getattr__("name"),
                'age' : object.__getattr__("age"),
                'address' : object.__getattr__("address")

        }


student = Student("zhansna",21,"beijin")
# print(student)
# student.to_str

# 调用转化函数
student_dict=Student_to_dict(student)
print(type(student_dict))
print(student_dict)

# <class 'dict'>
# {'name': 'zhansna', 'age': 21, 'address': 'beijin'}

通过函数将对象转化为dict再利用json库就可以转化为json了。

除了用函数转化为,类也提供了内置属性__dict__直接将实例转化为dict,但是缺点是成员变量的名称变了。

student.__dict__
{'_Student__name': 'zhansna', '_Student__age': 21, '_Student__address': 'beijin'}

成员变量名都加上了_Student前缀。

自定义函数和__dict__属性都可以将类的实例转化为dict,然后再调用json.dumps()转化为json。

jaon转python对象
除了将python对象转json,json模块还提供了复原功能,将json转为python内置对象。

# list字符串转list
list_one=json.loads('[1,2,3,4,5]')
print(list_one)
# [1, 2, 3, 4, 5]


# 字典字符串转dict
dict_t=json.loads('{"username":"zhangsan","password":"123456"}')
print(dict_t)
# {'username': 'zhangsan', 'password': '123456'}

在这里插入图片描述

最重要的还是转类的实例对象了,通过json.loads(student_json)方法只能将json转化为dict,需要自定义函数将dict转化为类。

# 自定义转化方法
def func(dict,object):
    return object(dict.get("name"),dict.get("age"),dict.get("address"))

在这里插入图片描述
通过自定义的函数将json经过dict再转化为Student类。

解析json文件

json模块除了能将python内置对象转化json外还可以解析json文件。load(file)方法读取将json文件转化为python的dict对象。dump(data,file)来写入文件。读写需要借助IO流。

读取文件
在这里插入图片描述
在这里插入图片描述

写入文件
在这里插入图片描述
在这里插入图片描述

python还提供了import xml库来解析xml文件,比较复杂,不如json文件简单。
python解析xml文件

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值