文件操作

打开文件

  • 文件路径:相对路径 : 1-读文件.py 绝对路径 : C:\Users\xlg\Desktop\文件操作\1-读文件.py
  • r :以只读的方式打开文件,文件描述符放在文件的开头位置
  • rb : 以二进制格式打开文件,文件只读,文件描述符放在文件的开头位置
  • w:以只写的方式打开文件,如果文件存在,那么覆盖该文件,如果文件不存在,则会创建文件。
  • wb:以二进制格式打开文件,文件用于写入,如果文件存在,那么覆盖该文件。
  • w+:以读写的方式打开文件
  • a:打开一个文件用于追加写入,如果文件不存在,则会创建文件;如果文件存在,则会在文件末尾写入内容。
  • a+:以读写的方式打开文件
  • encoding:文件的编码格式
    errors:错误处理
    strict:默认方式,如果遇到非法字符,抛出异常
    ignore:忽略非法字符
    replace:用?代替非法字符
    open:返回值:文件描述符

打开普通文件

f1 = open("file.txt","r", encoding="utf-8")
# 当文件不存在,抛出异常
# FileNotFoundError: [Errno 2] No such file or directory: 'file.txt'

# 打开二进制格式的文件:不能设置encoding
f2 = open("file.txt", "rb")
# 指定错误处理方式
f3 = open("file.txt", mode="r", encoding="utf-8", errors="ignore")

读取文件


# 读取文件所有内容    
str1 = f1.read()
# 读取指定字符个数
str2 = f1.read(4)
# 读取整行 包括\n   size代表字符个数 中文也算一个
str3 = f1.readline(size)  
# 读取所有行,返回一个列表
str4 = f1.readlines()

#如果给定的size数字大于0,实际返回的size字符数会比写入的size大,原因需要填充缓冲区

# 修改描述符的位置  seek()
# tell()  返回描述符的位置
print(f1.read(3))
print(f1.tell()) # 3
f1.seek(3)
print(f1.read(3))  # 打印第四个到第六个字符

关闭文件


f1.close() # 必须关闭

try:
    f2 = open("file.txt", "r", encoding="utf-8")
    print(f2.read())
except FileNotFoundError as e:
    print("文件没有找到")
finally:
    if f2:
        f2.close()

# 简洁的方式:
with open("file.txt", "r", encoding="utf-8") as f5:
print(f5.read())

写入文件

with open("c.txt","w", encoding="utf-8") as f2:
f2.write("124789kfxfh")

编码与解码

# 编码  encode("编码格式")
with open("d.txt","wb") as f1:
    str1 = "北京你好,我有沙尘暴,hello world"
    f1.write(str1.encode("GBK"))

# 解码  decode("编码格式")
with open("d.txt","rb") as f2:
    data = f2.read()
    print(data)
    print(type(data))  # byte 字节

    newStr =data.decode("GBK")
    print(newStr)
    print(type(newStr))  # str

存储操作

有时候,我们需要将某些字符串、列表、字典、元组等数据长久保存,现在,这个时候,就需要使用永久性存储的模块文件pickle。pickle模块可以将对象转换为一种可以存储或读取的格式。

pickle:该模块实现了数据的序列化与反序列化,通过pickle的序列化操作,可以实现将程序中的对象保存到文件信息中,实现永久性存储。
通过pickle的反序列化操作,可以实现将程序中的永久性存储的对象解析出来。


list1 = [1,2,3,4,5,6]
f1 = open("list.data", "wb")
# 将列表信息保存到文件中
# pickle.dump(即将存储的数据对象, 存入的文件)   序列化操作
# 建议:保存对象时,文件的后缀名不要使用电脑系统能够打开的格式
pickle.dump(list1, f1)
f1.close()


# 读取文件
tmp = []
# 打开文件
f2 = open("list.data", "rb")
# pickle.load(读取的文件)  有返回值
tmp = pickle.load(f2)
print(tmp)
f2.close()
    原文作者:rottengeek
    原文地址: https://segmentfault.com/a/1190000014531897
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞