zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python:对文件的操作

Python文件 操作
2023-09-11 14:17:00 时间

目录

一:文件的打开和关闭

二、文件的读和写

写的话就需要使用到write函数

读的话需要使用到read函数

三、文件的序列化和反序列化

序列化 

dumps

dump

反序列化

load和loads的区别:


一:文件的打开和关闭

利用python打开关闭文件需要使用open和close函数

# open(文件路径,访问模式)
# 模式:w  可写
#      r  可读
f = open('demo/test.txt','w')
#文件夹是不可以创建的
f.write('hello world')
#文件的关闭
f.close()

其中对文件的访问模式有

r	以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w	打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a	打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb	以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb	以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab	以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+	打开一个文件用于读写。文件指针将会放在文件的开头。
w+	打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+	打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+	以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+	以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+	以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

二、文件的读和写

正常我们创建完一个文件也是要去读取里面的内容,或写里面的内容

写的话就需要使用到write函数

# 文件写数据
# write方法去写数据

fp = open('demo/test.txt','a+')

fp.write('hello world,i am superman\n' * 5)
fp.close()

 对应文件中查看一下

读的话需要使用到read函数

这里我读取桌面的一个脚本文件

fp = open('C:\\Users\\siyu.guan\\Desktop\\巡检.txt','r',encoding='UTF-8')
# fp.read是一个字符一个字符读
# fp.readline是一行一行的读,效率会高点,但是只会读一行
# fp.resdlines可以按行读取,但是会将所有的数据都读到,并且一一个列表的形式返回,而列表的元素,是一行一行的数据
content = fp.read()
print(content)

执行后看一下控制台

就会显示出里面的内容,需要注意的是read是按字符,readline是按行来读,效率更高,但是只能读一行,readlines可以读多行,但是是以列表的形式去返回值,需要注意

三、文件的序列化和反序列化

  通过文件操作,我们可以将字符写入到一个本地文件,但是,如果是一个对象(例如列表,字典,元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里
  设计一套协议,按照某种规则,把内存中的数据转化为字节序列,保存到文件,这就是序列化,反之,从文件的字符序列回复到内存中,就是反序列化
  python中提供了JSON这个模块来实现数据的序列化和反序列化

序列化 

dumps

在使用dumps函数进行序列化时,我们需要先对对象进行序列化,再赋值写入文件中

# 序列化的2种方式
# dumps()
# 导入jsn模块到该文件
import json

# (1)创建一个文件
file = open('demo/test.txt','w')
# 定义一个列表
names = ['yy','zz','apple','banana','yyzz']
# 序列化   我们只会在使用scrapy框架的时候,该框架会返回一个对象,我们要将对象写入到文件中,就要使用json.dumps
# 将names这个列表对象,转化为json格式
names_json = json.dumps(names)
# 写入文件
file.write(names_json)
file.close()
# 读一下文件
file = open('demo/test.txt','r')
content = file.read()
print(content)
file.close()

  会发现,我们定义names时是一个list类型,但是通过json.dumps后,就会以string类型输出到文件中,这也是我们想要的。

dump

dump函数就会更简单一点,我们不需要多一层赋值+写入,dump可以自动为我们完成

import json
# dump
# 在将对象转换为字符串的同时,指定一个文件的对象,然后把转换后的字符串写入到这个文件里
f = open('demo/test1.txt','w')

name = ['tt','aa']
# json.dump  内只需指定要序列化的名称和哪个文件就可以直接完成写入
json.dump(name,f)
f.close()

f = open('demo/test1.txt','r')
content1 = f.read()
print(content1)
f.close()

反序列化

比如,我们要将文件中的内容,以列表,元组,字典的形式在python中为为我们展示或方便查询

我们需要使用loads和load函数

# 反序列化
# 将json的字符串变成一个python对象
file = open('demo/test.txt','r')
# 我们读取一下第一个文件内的内容
content = file.read()
# 查看文件内容的类型为string
print(type(content))
file.close()
# 反序列化也有两种方法   loads和load

# loads
result = json.loads(content)
print(result)
print(type(result))

# load
f = open('demo/test1.txt','r')
result = json.load(f)
file.close()
print(result)
print(type(result))

首先我们读取一个上文中序列化后的文件内容,分别对他们进行一个反序列化,并赋值到一个变量中,观察其类型

load和loads的区别:

在使用loads时,我们要先取文件中的内容将它赋值到一个变量,再对他进行一个反序列化,再赋值后,才可以进行查看

load就会简化一步操作,我们直接打开文件后,使用load直接对指定文件进行反序列化,文件内的内容会自动全部反序列化好,我们再进行查看就可以了