十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在研究 k8s 的yaml 配置文件的时候,我总担心自己一不小心 会写错,所以我向往 使用将对象 序列化 yaml 的形式,
公司主营业务:成都网站制作、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出七星关区免费做网站回馈大家。
其实 python object 可以 直接 转 yaml ,甚至也可以 直接 转成yaml文件!!!
这里 会经常用到几个 函数 vars() ast.
我们先尝试用最笨的方法 实现 object到yaml 的转化
在python对象 convert to dict 的形式,使用 vars()函数
然后 dict convert to json 使用 json.dumps(dict)函数
然后 json converte to yaml 使用 ya= yaml.load(json.dumps(dict)) 然后
再 yaml.safe_dump(ya,default_flow_style=False)
至此我们看到 从 python Object --- dict ---- json --- yaml 的转化
其中 obj dict json yaml 转 string ,只要 str()函数即可,或者 str(vars())结合
yaml 格式 写入到文件 ,需要注意的是, open()函数 的mode 一定要是 'w' ,不能是’wb', b代表是二进制写入
yaml 写入的是dict str,使用 ‘wb' 会报错,[yaml TypeError: a bytes-like object is required, not 'str']
【出现该错误往往是通过open()函数打开文本文件时,使用了‘rb’属性,如:fileHandle=open(filename,'rb'),则此时是通过二进制方式打开文件的,所以在后面处理时如果使用了str()函数,就会出现该错误,该错误不会再python2中出现。
具体解决方法有以下两种:
第一种,在open()函数中使用‘r’属性,即文本方式读取,而不是‘rb’,以二进制文件方式读取,可以直接解决问题。
第二种,在open()函数中使用‘rb’,可以在使用之前进行转换,有以下实例,来自: 】
其实 python object 可以 直接 转 yaml ,甚至也可以 直接 转成yaml文件!!!
比如我已经定义了一个 Dog python class,他有 好几个属性 并已经赋值初始化了
另外生成 yaml 对象
生成yaml文件
结果是
反过来 yaml ---- json --- 持久化 json 文件 indent=1属性是为了让 json 不以单行展示,而是展开
注意的是 python 的 dict 和set 很相似 ,都是 { }, set 里是list, dict 是键值对
【# set object is not JSON serializable [duplicate]
】
打开 demo.json
yaml --- dict
yaml --- python object
json -- dict
json.loads()
dict-- json
json.jumps()
str --- dict
newdict=dict(str)
json -- python object
一个python object无法直接与json转化,只能先将对象转化成dictionary,再转化成json;对json,也只能先转换成dictionary,再转化成object,通过实践,源码如下:
yaml -- python object
对yaml,也只能先转换成json ---dictionary,再转化成object,通过实践,源码如下:
dict -- -python object
python对象 默认都有一个 私有的属性 dict 取值 就是 object的 字典形式, 赋值就就可以给对象属性对应赋值
例如json 转 对象
对象 转 json
Python之dict(或对象)与json之间的互相转化
在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作。
dict字典转json数据
对象转json数据
json数据转成dict字典
json数据转成对象
json的load()与dump()方法的使用
dump()方法的使用
有少量数据存在txt文件中,如何进行读取、写入和修改呢,今天小编就分享下:
python常用的读取文件函数有三种read()、readline()、readlines()
1、read() : 一次性读取所有文本
with open("1.txt", "r", encoding='utf-8') as f: #打开文本
data = f.read() #读取文本
print(data)
2、readline() : 读取行的内容
with open('1.txt', 'r', encoding='utf-8') as f:
data = f.readline()
print(data)
3、readlines():读取全部内容,以数列的格式返回结果,可以配合for循环使用。
with open('1.txt', 'r', encoding='utf-8') as f:
data = f.readlines()
print(data)
image.png
with open('1.txt', 'r', encoding='utf-8') as f:
for i in f.readlines():
i = ann.strip('\n') #去除文本中的换行符
print(i)
4、with open()写法与open()的区别
1666058828369926.png
image.png
open()完成后必须调用close()方法关闭文件,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件
数量也是有限的,由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。with open()则可以避免这样的情况。
5、python文件读写模式
r : 读取文件,若文件不存在则会报错
w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件
a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾
r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖
w+ : 可读,可写,文件不存在先创建,会覆盖
a+ : 可读、可写,文件不存在先创建,不会覆盖,追加在末尾
rb:以二进制方式打开,只能读取文件。如果文件不存在,会发生异常
wb:以二进制方式打开,只能写入文件。如果文件不存在,创建该文件; 如果文件存在,会清空,在打开(覆盖)
rt:以文本读方式打开,只能读文件。不存在报错
wt:以文本写方式打开,只能写文件。 不存在创建;存在覆盖
rb+:以二进制方式打开,可读、写文件。如果文件不存在,会发生异常
wb+:以二进制方式打开,可读、写文件。如果文件不存在,创建该文件;如果文件存在,会清空,在打开(覆盖)
Python 怎么判断一个文件是否是二进制文件呢
比如 我在网上抓一组文件,这组文件有图片,有普通文本,有压缩包,有 PDF 各种类型的文件
如果是图片 或者 pdf 保存的话需要使用二进制方式保存:
open(fileName, "wb").write(content)
文本需要使用文本方式保存
open(fileName, "w").write(content)
有没有什么 好的办法去辨别这个文件是否是二进制文件呢