日期与时间
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文件