开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
文件的读写
写数据
在上面的例子中,我们每次运行写入操作,都会覆盖掉前面的内容,很多时候我们想要却是追加数据到文件中,那么我们就需要更换一个模式,使用a访问模式来实现数据的追加写入,如:
txt = open('text.txt', 'a')
txt.write("Hello world\n" * 5)
txt.close()
第一次运行
第二次运行
读数据
文件读取数据常用的API有如下几个:
readreadlinereadlines
read:读取整个文件的内容,按照一字节一字节的形式读取出来
txt = open('text.txt', 'r')
print(txt.read())
txt.close()
readline:直接读取一整行数据,会比字节的形式读取效率更高
txt = open('text.txt', 'r')
print(txt.readline())
txt.close()
readlines:按行读取整个文件,会返回一个列表,其中的元素为一行行的数据
txt = open('text.txt', 'r')
print(txt.readlines())
txt.close()
序列化和反序列化
通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。
Python中提供了JSON这个模块用来实现数据的序列化和反序列化。
JSON模块
JSON(JavaScriptObjectNotation,JS对象简谱) 是一种轻量级的数据交换标准,其本质是字符串。
序列化
JSON提供了dump和dumps方法,将一个对象进行序列化。该方法是将对象转换成为字符串,本身不具备将数据写入到文件的功能。
在上面的案例中,我们都是将字符串写入到文件中,没有尝试过列表、字典、元组等的写入,现在我们就先来尝试一下看会怎么样吧
可以看到编译器报错了,说写入操作必须是字符串。
dumps:将Python对象变成一个json字符串
# 引入json
import json
txt = open('text.txt', 'w')
list = ['zhangsan', 'lisi']
jsonStr = json.dumps(list)
print(type(jsonStr))
txt.write(jsonStr)
txt.close()
将转换之后的对象类型打印出来,可以看到是字符串类型的。
dump:将对象转换成字符串,并写入到指定的文件中
# 引入json
import json
txt = open('text.txt', 'w')
list = ['zhangsan', 'lisi']
json.dump(list, txt)
txt.close()
反序列化
既然列表等对象可以转换成字符串并写入到文件中,那么我们读取文件的内容,能不能将其转换成为对象呢?这个就涉及到了json的反序列化了,有两个主要的API:
- loads
- load
loads:将读取出来的字符串进行反序列化
# 引入json
import json
txt = open('text.txt', 'r')
jsonStr = txt.read()
list = json.loads(jsonStr)
print(list)
print(type(list))
txt.close()
load:直接读取文件中的数据并反序列化
# 引入json
import json
txt = open('text.txt', 'r')
list = json.load(txt)
print(list)
print(type(list))
txt.close()