小工具      在线工具  汉语词典  css  js  c++  java

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

Python,python 额外说明

收录于:152天前

日期与时间

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 字段的数据类型。
在这里插入图片描述

字典转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

类转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文件

. . .

相关推荐

额外说明

AES(ECB/CBC) JS实现加解密

https://github.com/sytelus/CryptoJS 其中 CryptoJS 使用的谷歌开源 https://code.google.com/p/crypto-js/  https://code.google.com/archive/p

额外说明

PostgreSQL pgsql 身份证格式验证、身份证格式提取API

PostgreSQL pgsql身份证格式校验,身份证格式提取api 身份证ID结构说明 身份证号包含的信息: 空间:6位行政区划 时间:出生日期8位(二代),6位(一代) 顺序:同地区同日期内出生人的序号 性别:奇数顺序码为男性,偶数为女性 校验码:对

额外说明

一举突破所有方法,Fiddler和Charles抓包有详细图文教程

一、Fiddler 1.1 Fiddler抓取HTTPS设置 1.1.1 配置证书 Tools菜单 —> Options —> HTTPS —> 勾选Decrypt HTTPS traffic选项。 说明: 勾选Decrypt HTTPS traffic

额外说明

接口性能优化技巧

背景 我负责的系统在去年初就完成了功能上的建设,然后开始进入到推广阶段。随着推广的逐步深入,收到了很多好评的同时也收到了很多对性能的吐槽。 刚刚收到吐槽的时候,我们的心情是这样的: 当越来越多对性能的吐槽反馈到我们这里的时候,我们意识到,接口性能的问题的

额外说明

Unity零基础到进阶 | Unity中的多线程的使用,普通创建Thread + 使用Loom插件创建

前言 在Unity中多线程其实并不常用,所以关于这块的知识也没有去研究的特别透彻 所以本篇文章就来简单说一下多线程在Unity中的作用、限制以及用法 Unity中的多线程的使用 Unity中除了主线程负责UI等绘制之外,还有协程、多线程可以使用。 其中协

额外说明

Linux命令200例:mdel删除指定目录下的多个文件

-作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。 -本文已收录于专栏:Linux命令大全。 -本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入讲解。欢迎提前锁定关注。 文章目录 一、背景 二、

额外说明

编写网络程序让浏览器访问本地页面

文章目录 一、提出任务 二、完成任务 (一)创建网页 (二)创建服务程序 (三)编译服务程序 (四)运行服务程序 (五)访问网页 一、提出任务 基于Socket网络编程,编写一个网络服务器程序,实现浏览器访问本地页面的功能。 二、完成任务 (一)创建网页

额外说明

Pytorch深度强化学习1-2:详解K摇臂赌博机模型和ϵ-贪心算法

目录 0 专栏介绍 1 K-摇臂赌博机 2 ϵ \epsilon ϵ-贪心算法 3 softmax算法 4 Python实现与分析 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见的强化学习算法、案例进行实现,帮助读者

额外说明

IIS 6.0中配置HTTP压缩的步骤如下:

IIS 6.0中配置HTTP压缩的步骤如下: 打开Internet信息服务(IIS)管理器,右击"网站"->"属性",选择"服务"。在"HTTP压缩"框中选中"压缩应用程序文件"和"压缩静态文件",按需要设置"临时目录"和"临时目录的最大限制"; 在In

ads via 小工具