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

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

Python,python 额外说明

收录于:18天前

日期与时间

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

. . .

相关推荐

额外说明

new SimpleDateFormat("yyyy-mm-dd") 转换问题

一定要用"yyyy-MM-dd"   比如,   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); Date dateBirth = sdf.parse("2018-7-1"); 会产生

额外说明

转:解决修改java类文件需要重启tomcat问题

  转载链接:http://blog.sina.com.cn/s/blog_5fd67b8b0100j48x.html   用eclipse开发java的时候,经常在修改java类文件的时候都需要重启tomcat,比较麻烦,今天问了同事解决方法,记录下备

额外说明

基于io.jsonwebtoken的jwt工具类-tokenUtils

   实习期间利用无聊的空余时间写的一个JWT的工具类,可以用于token生成,token解码,token刷新。   工具类基于io.jsonwebtoken——一个jwt的生成库。So在使用这个工具类时需要添加相应依赖 <dependency>

额外说明

centos——安装minio

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

Linux 关闭透明大页(transparent_hugepage)和 NUMA

有些情况下需要关闭Linux 服务器的 透明大页和 NUMA,比如安装 Oracle 数据库! 下面介绍如何永久关闭 透明大页 和 NUMA 的命令: Linux 6: 关闭透明大页: cat >>/etc/rc.d/rc.local <<EOF if

额外说明

Spark基础学习笔记32:Spark Streaming概述

文章目录 零、本讲学习目标 一、Spark Streaming概述 (一)什么是Spark Streaming (二)Sparing Streaming的主要优点 1、易于使用 2、易于与Spark体系整合 二、Spark Streaming工作原理 (

额外说明

打不开idea,打不开webStorm,打不开goland;idea一闪而退,webStorm一闪而退,goland一闪而退;完全卸载idea,完全卸载webStorm,完全卸载goland

目录 引言 查找问题 完全卸载 将待卸载的软件移到废纸篓 删除Library目录下的部分文件 示例 卸载 WebStorm2020.3 备注 引言 因为公司配置的Mac电脑,所以,我的这篇文章以Mac电脑为主来说明。 因为我既使用golang ,也是用J

额外说明

【软件评测师】基础理论篇:1 软件测试概述

目录 一、软件测试的背景 二、软件错误相关的典型案例 三、国内外发展现状及趋势 1、软件测试理念的演化 2、软件测试技术发展趋势 一、软件测试的背景 1、20 世纪中期时计算机诞生 ~ 60 年代末期:计算机诞生初期,没有清晰的软件测试概念,认为 “程序

额外说明

Linux【环境部署 01】NTP时间服务器搭建及Linux+Windows客户端使用(一篇学会使用NTP服务)

1.什么是NTP 百度百科:网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差

额外说明

Windows提示缺少msxml3r.dll文件如何解决?

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个msxml3r.dll文件进行安装(前提是找到适合的版本),当

ads via 小工具