zl程序教程

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

当前栏目

Python-文件操作

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

文件

文件的打开和关闭

文件的路径

  • 绝对路径:指的是绝对位置,完整的描述了目标所在地,所有目录层级关系是一目了然的
    • 例如: E:\python,从电脑的盘符开始,表示的就是一个绝对路径。
  • 相对路径:是从当前文件所在的文件夹开始的路径
    • text.txt,是从当前文件夹中查找test.txt文件
    • ./test.txt,也是在当前文件夹里查找test.txt文件,./表示的是当前文件夹
    • ../test.txt,从当前文件夹的上一级文件夹里查找test.txt文件。../表示的是上一级文件夹
    • demo/test.txt,在当前文件夹里查找demo这个文件夹,并在这个文件夹里查找test.txt文件

访问模式

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

打开文件/创建文件

  • 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件路径,访问模式)
# open(文件路径,访问模式)
# 模式 : w 可写 r 可读
# 创建文件
open('test.txt','w')
# 打开文件
f = open('test.txt','w')
# 文件里面写一句话(英文)
f.write('hello word')
#  文件的关闭
fp = open('a.txt','w')
fp.write('hello')
fp.close()

文件的读写

写数据

  • write方法
fp = open('test.txt','w')
fp.write('hello,world,sectest \n' * 5)
fp.close()
# 如果再次运行这段代码,还是打印五
# 如果文件存在 会先清空原来的数据 然后在写
# 想要在执行每一次之后都要追加数据 模式由w变为a 就可以没你执行追加数据了

读数据

fp = open('test.txt','r')
# 默认情况下 read是一字节一字节的读 效率比较低
content = fp.read()
print(content)
# readline() 是一行一行的读取 但是只能读一行
content = fp.readline()
print(content)
# readlines 可以按照行来读取 并且以一个列表形式返回
content = fp.readlines()
print(content)

文件的序列化和反序列化

序列化

  • 将对象(列表、字典、元组等)转换为字符序列
fp = open('test.txt','w')
# 默认情况下 对象是无法写入到文件中 如果想写入到文件 那么必须使用序列化操作
name_list = ['zhangshan','lisi']
fp.write(name_list) # TypeError: write() argument must be str, not list
dumps()
  • 我们在使用scrapy框架的时候 该框架会返回一个对象 我们要将对象写入到文件中 就要使用json.dumps
# (1)创建文件
f = open('test.txt','w')
# (2) 定义列表
name_list = ['zhangshan','lisi']
# (3)倒入json模块到该文件中
import json
# (4) 序列化
# 将python 对象编程json字符串
names = json.dumps(name_list)
f.write(names)
f.close
dump
fp = open('test.txt','w')
name_list = ['zhangshan','lisi']
import json
# 相当于names = json.dumps(ame_list) 和fp.write(names)
json.dump(name_list,fp)
fp.close()
反序列化
  • 将json的字符串变成一个python对象
f = open('ext.txt','r')
content = f.read()
print(type(content)) # str
loads
f = open('ext.txt','r')
content = f.read()
import json
result = json.loads(content)
print(type(result))
f.close()
load
f = open('test.txt','r')
import json
result = json.load(f)
print(type(result))
f.close()