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

2023-11-13

日期与时间

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python常用内置库时间,日期与JSON转换 的相关文章

随机推荐

  • 多线程面试手撕题

    按序打印 我们提供了一个类 public class Foo public void one print one public void two print two public void three print three 三个不同的线程
  • 【雕爷学编程】Arduino动手做(93)--- 有关OLED屏的两个非常重要的知识点:像素点点阵和坐标系

    37款传感器与执行器的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止这37种的 鉴于本人手头积累了一些传感器和执行器模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手尝试系列实验 不管
  • Redis(一)单实例部署配置

    一 下载 安装 安装环境 CentOS 7 下载地址 http download redis io releases redis 4 0 11 tar gz 下载后通过FTP工具上传到服务器 app redis package 或者使用命令
  • 如何在Windows PowerShell中获取当前的用户名?

    本文翻译自 How do I get the current username in Windows PowerShell 如何在Windows PowerShell中获取当前的用户名 1楼 参考 https stackoom com qu
  • 第一章 Centos7.5介绍与安装部署-centos7.5知识

    一 历史发展 Linux 操作系统的鼻祖Unix 肯 汤姆逊和丹尼斯 里 奇于1969年在贝尔实验室建立了Unix操作系统 一款同时支持多人登录的操作系统 为了开发此系统他们发明了C语言 并于1983年俩人获得了图灵奖 GNU社区的建立 1
  • docker(二)基础命令

    一 docker命令 镜像 1 查看docker版本 docker v docker version decker info 可以查看所有运行容器的镜像数量 运行容器的版本 可以分配的CPU 总的内存等信息 docker的工作目录 var
  • 计算机网络期末复习总结大全(持续更新中)

    计算机网络知识点总结大全 第一章 概述 知识点1 第一次理论课 互联网的两个基本特点 联通性和资源共享 互联网 多个网络通过一些路由器相互连接起来 构成一个覆盖范围更大的计算机网络 即互联网 互联网不等于互连网 1969年ARPANET诞生
  • robot framework 使用四:分层设计和截图以及注意事项

    再说一下目前的主要环境信息和版本 操作系统 win7 64位 python版本 2 7 6 RIDE版本 1 2 3 selenium2library 1 5 0 selenium 2 40 0 pip 1 5 4 setuptools 0
  • 数值计算笔记之数值积分(一)

    目录 0 引言 一 数值积分的积分思想 1 中矩形公式 2 梯形公式 3 辛普森公式 二 求积公式的余项和代数精度 三 插值型求积公式 四 牛顿 柯特斯公式 N C公式 五 复化求积法 1 复化梯形公式 2 复化辛普森公式 要求 n 为偶数
  • 小米解bl锁跳过168小时_xiaomi redmi 红米秒解BL工具分享支持小米红米机型秒解BL跳过168小时

    目前小米的新机 官方风控都默认绑定7天也就是168小时才能解锁BL 部分账号需要绑定15天才能满足条件 导致很多爱玩机的小伙伴被拒门外 并不是所有人都愿意等待官方解锁时候 而跳过168小时解锁 也成为了很多小伙伴希望的事情 本工具来自ROM
  • python程序调优:替换pandas包的Series与DataFrame构造与计算

    在实际部署的时候 使用dataframe的计算效率明显低于numpy 因此在程序中大量运行时避免使用pandas Series与pandas DataFrame及频繁的构造 避免 替换的方法如下 使用numpy ndarry替换pandas
  • 刷题之旅第39站,CTFshow 红包题目8

    感谢ctf show平台提供题目 下载压缩包 看到了两个文件 使用010editor 打开mima png 在末尾处发现 kobe code 这里附上 Admin师傅提供的kobe code对照图 对应着解出来了压缩包密码 OAEBEYTK
  • 单目标跟踪Siam

    一 关于单目标跟踪 本人不了解传统的相关滤波法 所有想法总结仅仅建立在深度学习的基础上 对于单目标跟踪而言一般的解释都是在第一帧给出待跟踪的目标 在后续帧中 tracker能够自动找到目标并用bbox标出 关于SOT single obje
  • 2022年哪些前端技术点会火

    转载于 2022年哪些前端技术点会火 扫地盲僧 原创不易 文章质量很高 个人留存 希望大家支持原作者 2022 年什么会火 什么该学 本文正在参与 聊聊 2022 技术趋势 征文活动 前段时间我发布了一篇关于 2022年前端行业技术发展趋势
  • Caffe (2) SyncedMemory内存管理机制

    在Caffe中 blob是对于上层空间的数据管理存储对象 对于上层来说的话 大部分时候是直接取blob对象的指针来用 如果不考虑GPU的情况下 实际上很简单 就是返回指针就行 但是问题是通常的数据是在GPU和CPU上同时存在 需要两个数据在
  • PLSQL新建用户

    一 打开PLSQL 一般默认用户名 system 密码 二 右侧列表找到Users 右键新建 三 创建用户 名称 口令自定义 剩下的按图 四 角色权限创建connect resource dba 点击应用 五 重新用新账号和口令登陆PLSQ
  • redis的Cacheable注解介绍

    1 引入依赖
  • Webpack 5 新特性

    Webpack 5 在2020年10月正式发布 更新的内容比较多 我们从头梳理下本次更新的核心内容 文章目录 一 构建优化 1 Tree Shaking 删除无用代码 2 合并模块 concatenateModules 3 副作用 side
  • 制度汇编格式怎么生成目录_怎么用word制作标书?大神般操作经验在这里

    怎么用word制作标书 word制作标书是每一个制作标书的制标员 如何用我们常用的办公软件来制作标书呢 除了将必要的材料编写入里面 还需要注意格式 字体等固定排版问题 如果你还是一枚制作标书的新人 请一起来和保标招标网小编学习怎么用word
  • python常用内置库时间,日期与JSON转换

    日期与时间 datetime是Python处理日期和时间的标准库 from datetime import datetime if name main cur date datetime now print cur date print c