跳转至

永久储存

文件操纵

使用open()函数打开文件,对文件进行操作。

Python
f = open("1.txt", "w")  # 打开文件1.txt,并赋予写入权限,此时就将文件对象赋值给f
f.write("111")  # 将内容写入到文件对象中
f.writelines(["11\n", "22\n"])  # 将多个内容写入到文件对象中,可以传入可迭代对象,这里不会添加换行需要自行添加
# 此时数据保留在内存中,需要保存进行写入
# 方法一
f.close()  # 这时文件关闭,如果需要继续添加则需要重新创建文件对象写入
f = open("1.txt", "r+")
# 方法二
f.flush()  # 不关闭文件进行保存

# 判断写入和读取是否有权限
# 写入权限判断
f.writable()  # --> True
# 读取权限
f.readable()  # --> True

# 文件对象是支持迭代的可以通过for循环迭代打印文件内容
for i in f:
  print(i)

# 文件内部会存在一个文件指针,每次读取指针都会向下偏移,当读取完成指针就指到文件末尾,此时再读取就会读不到数据,需要对指针重置
# 追踪文件指针位置
f.tell()  # --> 获取文件指针位置
# 修改文件指针位置
f.seek(0)  # --> 传入到文件开头位置

# 每次读取一行
f.readline()
# 读取全部
f.read()

# 截取指定位置,如果不指定位置则截取到指针当前位置,保存文件仅保存截取到的内容
f.truncate(29)  # 截取到29处

# 如果打开文件只使用w权限默认新写入的内容会覆盖历史内容
# 文件EOF表示文件读取结束

文件路径处理

不同操作系统路径分割符不一样, window 是 \,其他系统则 /,处理文件路径问题使用模块 pathlib 实现,面向对象的文件系统路径,具体操作可以查看模块 pathlib。

上下文管理器 with

使用方法:

Python
# 普通打开文件
f = open("1.txt", "w")
f.write("111")
f.close()

# 使用with打开文件,不需要手动关闭文件,即使在运行过程中发生异常也不影响文件的保存
with open("2.txt", "w") as f:
  f.write("111")

 # 同时打开多个文件使用逗号隔开
with open("1.txt", "w") as f1, open("2.txt", "w") as f2:
  pass

Python 对象序列化pickle

可以将 Python 对象保存到文件中,可以永久存储 Python 对象,允许将字符串、列表、字典存储到文件中。

Python
import pickle

x = 123
y = [1, 2, 3]
z = {"1":1, "2":2, "3":3}
# 将python对象保存到文件中,使用dump(),保存的文件后缀为.pkl
with open("data.pkl", "wb") as f:
  pickle.dump((x, y, z), f)

# 将保存的python对象读取出来,使用load()
    print(a)
    print(b)
    print(c)