# Python学习笔记 Day11

文件和异常

Python学习笔记 Day11

文件和异常

名词解释:

持久化:数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。cmpHibernate只是对象模型到关系模型之间转换的不同实现。而实现数据持久化最直接简单的方式就是将数据保存到文件中。

python中,通过 open 函数实现

操作模式 具体含义
'r' 读取 (默认)
'w' 写入(会先截断之前的内容)
'x' 写入,如果文件已经存在会产生异常
'a' 追加,将内容写入到已有文件的末尾
'b' 二进制模式
't' 文本模式(默认)
'+' 更新(既可以读又可以写)

读写文本文件

默认可以参考上表,此外,encoding 的默认值是 None。

Python
def main():
    f = open('致橡树.txt', 'r', encoding='utf-8')
    print(f.read())
    f.close()


if __name__ == '__main__':
    main()

为了提高容错,使用 tryexcept 代码块来处理报错。

读写二进制文件

Python
p = [1,2,3].append(4)
for i in p :
    print(i)
# TypeError: 'NoneType' object is not iterable

出现这个错误的原因是, append 其实是一个方法,而这个方法只是往列表 p 中加入 4 这个元素,但其实并没有返回这个列表。

读写JSON文件

JSON Python
object dict
array list
string str
number (int / real) int / float
true / false True / False
null None
Python JSON
dict object
list, tuple array
str string
int, float, int- & float-derived Enums number
True / False true / false
None null
Python
import json


def main():
    mydict = {
        'name': '骆昊',
        'age': 38,
        'qq': 957658,
        'friends': ['王大锤', '白元芳'],
        'cars': [
            {'brand': 'BYD', 'max_speed': 180},
            {'brand': 'Audi', 'max_speed': 280},
            {'brand': 'Benz', 'max_speed': 320}
        ]
    }
    try:
        with open('data.json', 'w', encoding='utf-8') as fs:
            json.dump(mydict, fs)
    except IOError as e:
        print(e)
    print('保存数据完成!')


if __name__ == '__main__':
    main()

其中

  • dump - 将Python对象按照JSON格式序列化到文件中
  • dumps - 将Python对象处理成JSON格式的字符串
  • load - 将文件中的JSON数据反序列化成对象
  • loads - 将字符串的内容反序列化成Python对象

序列化(serialization):在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。与这个过程相反的动作,即从一系列字节中提取数据结构的操作,就是反序列化(deserialization)

在网站的搭建过程中,也遇到了json文件的修改,但我只是单纯改了其中的api……还需要更多的实战才能理解得更深刻。

最后编辑于
文章链接: http://pheustal.com/2019/09-20/pythonday11
本作品采用CC-BY-SA许可。