p.s.高产量博主,点个关注💓不迷路!
目录
I.文件的创建和写入
II.文件的读出
III.文件的序列化与反序列化
I.文件的创建和写入
python中,一个文件可以被创建和写入,它的示例代码如下:
# python文件操作
#
# 创建/打开一个文件:test.txt
# 格式为:open(文件的路径;文件的模式)
# 模式有:w 可写 r 可读 a 追加
fp = open('demo/test.txt','w')
# 文件的关闭
# 执行打开、读写操作后要及时关闭文件,释放内存!
fp.close()
# 文件的读写
# 向文件内写入内容:
# 格式为 文件对象.write('内容')
fp_w = open('demo/test1.txt', 'w')
fp_w.write('hello,world\n' * 5)
fp_w.close()
# 在w 写入模式下,每一次打开后,写入的位置都是开头,也即会覆盖之前的内容
# 在a 追加模式下,每一次会紧接着上一次写入的内容,不会覆盖:
fp_a = open('demo/test2.txt', 'a')
fp_a.write('hello\n' * 5)
fp_a.close()
需要注意的是,当文件在路径下不存在的时候,运行'w'写入模式时会自动创建文件并定为写入模式;'a'追加模式下,我们才可以每一次接着前一次的结尾写入,否则'w'模式下每一次都会覆盖前一次写入的内容!
II.文件的读出
文件的读操作有很多不同的类型,它的示例代码如下:
# 读取文件的内容
# read函数是按每字节读取,效率较低
fp_r = open('demo/test2.txt', 'r')
content = fp_r.read()
print(content)
fp_r.close()
# readline函数是一行一行的读取,但是调用一次只能读取一行:
fp_l = open('demo/test2.txt','r')
line = fp_l.readline()
print(line)
fp_l.close()
# readlines函数也是按照行来读取,并且可以一次性把所有行都读取到,
# 并返回一个列表的形式:
fp_ls = open('demo/test2.txt','r')
lines = fp_ls.readlines()
print(lines)
fp_ls.close()
需要注意的是,当文件不存在时,运行'r'读出模式是不会新建文件的,反而会抛出异常,因此要注意先新建好文件再读出。
III.文件的序列化与反序列化
最后介绍一下序列化和反序列化,先介绍一下序列化和反序列化的定义:
序列化:将列表、元组、字典等对象转成有序的字符串类型数据。
反序列化:将字符串类型数据转回列表、元组、字典等对象
下面是具体操作的示例代码:
# 文件的序列化和反序列化
# 默认情况下,只能直接将字符串写入文件,列表、元组、字典等对象无法写入文件:
fp = open('demo/test3.txt','w')
fp.write('hello world')
fp.close()
name_list = ['张三','李四']
fp_1 = open('demo/test4.txt','w')
# fp_1.write(name_list) 这句话就会报错,因为无法直接向文件写入列表对象,
# 只能先进行序列化,而后写入
fp_1.close()
# 序列化:对象 - - - > 字节序列(json字符串)
# 序列化有两种方式:
# (1) dumps() 函数 法
# 首先创建一个文件,并定义一个列表:
fp_2 = open('demo/test5.txt','w')
name_list = ['zhangsan','lisi']
# 导入json模块到python文件:
import json
# 进行序列化:使用json库的dumps()函数进行对象序列化:
names = json.dumps(name_list)
fp_2.write(names)
fp_2.close()
# (2) dump() 函数 法
# 它与dumps()的区别在于
# dump()函数在完成序列化的同时,会指定目标文件,并完成写入操作
# 类似于一步完成dumps()的两个操作:
fp_3 = open('demo/test6.txt','w')
# 这里可以看出,传入的参数多了一个文件对象,也即这就是指定的目标文件,序列化的内容会直接写进去:
json.dump(name_list,fp_3)
fp_3.close()
fp_4 = open('demo/test6.txt','r')
# 此时执行读取,它的结果是一个字符串类型:
content = fp_4.read()
print(type(content))
print(content)
fp_4.close()
# 但是我们的目的是要读出一个列表/元组/字典对象,因此需要做反序列化:
# 反序列化:字节序列 (json字符串)- - - > 对象
# 反序列化也有两种方法:
# (1) loads() 函数 法
fp_5 = open('demo/test6.txt','r')
content = fp_5.read()
# 调用json库中的loads()函数,传入被序列化的字符串变量,返回反序列化的json字符串:
import json
content = json.loads(content)
print(type(content))
print(content)
fp_5.close()
# (2) load()函数 法:
# 此法与dumps和dump的区别一样,也是实现了两步合成一步
# 即读取字符串与字符串转json对象(列表、元组、字典)合并在一步:
fp_6 = open('demo/test6.txt','r')
# 调用json库中的load()函数,同时完成读取+转换json对象:
result = json.load(fp_6)
print(result)
print(type(result))
fp_6.close()
之所以要做序列化和反序列化,在代码中有解释,这里再重复一下,原因在于文件的写入操作不支持字典、元组、列表等对象的写入操作,因而需要先序列化后写入文件,而后读出时执行反序列化操作。🌟🌟🌟
|