Python3:读写文件(以及dump和load操作二进制文件,异常的处理)

学习来源:Head First Python书籍

1.简介

本人通过学习Head First Python数据获得的知识,首先打开文件的方式一般默认为:“r”(读取模式),向文件中写入内容为:“w”,执行读写为:“w+”,向文件中追加内容:“a”

2.创建读取文件的函数

这里需要导入os模块:import os

import os

print("当前的工作目录是:{0}".format(os.getcwd()))

# 用于读取文本文件,读取本地的readme.txt文件,当前的python通过将当前的文件中的内容变为一行一行,用于迭代
def readFile(filePath):
    # 用于判断当前的文件是否存在
    if not os.path.exists(filePath):
        print("当前的文件 {0} 不存在!".format(filePath))
        return
    # 1.打开文件
    try:
        print("打开 {0} 文件成功!".format(filePath))
        data = open(filePath)
        # 2.读取文件
        # print(data.readline(),end="")
        # 3.数据回退到起点
        # data.seek(0)
        # 循环输出数据
        for each_line in data:
            (name, say) = each_line.split(":")
            print(name, end="")  # 使用end=""的结果不会出现换行
            print(" said: ", end="")
            print(say, end="")
        print("\n读取 {0} 文件成功!".format(filePath))
    except:
        print("当前读取文件出现错误,请检查当前的 {0} 文件是否存在".format(filePath))
    finally:
        if data in locals():
            # 3.关闭文件
            data.close()
            print("关闭 {0} 文件成功!".format(filePath))

1.在pyton中读取的文件就是一行一行读取的通过open方式打开文件,通过迭代open之后的文件获取读取的结果

2.通过readline()方法读取一行数据

3.记住一定要关闭当前的data(就是一定要关闭文件),关闭的时候需要判断当前的data变量是否存在:if data in locals():

4.当前的文本io操作中需要使用try:except:finally:方式进行异常的处理

5.可以通过str(异常)方式打印异常信息(由于python问题,所以写代码的时候一定要判断当前变量没有写错,默认python会自动创建变量)

6.通过os.path.exists(filePath)判断当前路径中是否存在这个文件!

2.1 这里准备一个文本用于测试数据

在这里插入图片描述

2.2 执行读取readme.txt操作

readFile("readme.txt")

结果:
在这里插入图片描述
发现具有乱码问题!

3.创建写入文件的函数

# w ,通过当前的操作向文件写入一些内容,当前的写入操作会改变当前的文本中的内容(先清空数据然后再向里面写入数据)
def writeFile(filePath, writeContent, option="w"):
    try:
        file = open(filePath, mode=option)
        print(writeContent, file=file)
        print("向 {0} 文件中写入内容 {1} 成功!".format(filePath, writeContent))
    except Exception as e:
        print("出现错误,错误的信息为:{0}".format(str(e)))
    finally:
        # 这里需要判断当前的file这个变量是否再当前的变量作用域的集合中
        if file in locals():
            file.close();

3.1 测试写入文件的函数

# w 表示只写,并当前文件不存在的时候就创建文件,有文件就清空文件的内容,并开始写入(只用于写的操作)
# w+ 表示读写,并当前文件不存在的时候就创建文件,有文件就清空文件的内容,并开始写入(用于读和写的两种操作)
# a 表示追加,只有单纯的写
# a+ 表示读写并向文件的内容追加内容
writeFile("writeTest.txt","hello world!","w+")

结果:
在这里插入图片描述
在这里插入图片描述

3.2 追加文件内容

writeFile("writeTest.txt","hello world!","a+")

追加结果:
在这里插入图片描述
在这里插入图片描述
1.写入文件的时候使用的是print方法,并指定file=当前open的文件,默认print方法使用的file=控制台

2.可以使用mode="w",mode="w+",mode="a",mode="a+"方法执行写入操作

4.使用try:with执行写入和读取操作

这里只演示写入操作,使用try-with的时候不需要关闭文件,当前的python会自动关闭

# 使用当前的try with 方式向文件中写入内容
def writeWithFile(filePath, writeContent, option="w"):
    try:
        with open(filePath, mode=option) as thisFile:
            print(writeContent, file=thisFile)
            print("使用当前的try with 方式向文件中写入内容成功!")
    except Exception as e:
        print("出现错误,错误的信息为:{0}".format(str(e)))

使用with open(文件) as 变量的时候在使用的时候就使用变量即可

操作:

# 使用try with方式读写文件,默认使用GBK编码格式写入
writeWithFile("writeWithTest.txt", "这是一段使用try with方式写入的内容", "w")

结果成功!

5.使用dump和load写入和读取二进制文件

读取二进制文件的时候需要导入 pickle:import pickle

import pickle
import os


# 用于处理将数据存储到本地的文件并使用二进制的方式实现操作
# 导入pickle模块,来保存所需要的数据文件,类似当前的java的序列化和反序列化

# 将需要的数据写入二进制文件中进行永久保存,使用dump方式实现,使用wb方式写入一个二进制文件
def writeToBinaryFile(filePath, option="wb"):
    try:
        with open(filePath, mode=option) as writeB:
            pickle.dump([1, 2, "three"], writeB)
            print("向二进制文件 {0} 中写入数据成功!".format(filePath))

    except Exception as e:
        print("写入文件出现错误了,当前的错误信息为:{0}".format(e))

# rb 表示readbinaryFile用于读取二进制文件的方式,就是加载二进制文件,使用load方式加载二进制文件
def readToBinaryFile(filePath, option="rb"):
    if not os.path.exists(filePath):
        print("当前读取的二进制文件:{0} 不存在!".format(filePath))
        return
    try:
        with open(filePath, mode=option) as readB:
            line = pickle.load(readB)
            print("加载二进制文件获取的数据为:{0}".format(line))
    except Exception as e:
            print("加载本地的二进制文件出现错误,错误的信息为:{0}".format(str(e)))

# print("读取文件出现错误,当前的错误信息为:{0}".format(e))


# 测试写入的数据
# writeToBinaryFile("data.pickle")

# 测试读取的数据

readToBinaryFile("data.pickle")

测试
在这里插入图片描述
1.使用dump和load方式操作二进制文件的时候需要导入pickle 模块

2.通过pickle.dump(数据,"wb",文件),将数据使用二进制方式写入到文件中,wb表示(write binary data)

3.通过pickle.load(文件,"rb")方式将二进制文件数据转化为对应的数据类型,rb表示(read binary data)

6.总结

1.当前的pyton操作文件的时候需要使用os判断文件是否存在

2.需要使用try:except:finally或者try:with:except:finally方式操作文件,避免出现异常,通过使用Except as e捕获异常并输出信息

3.使用二进制数据操作的时候需要使用pickle模块,通过dump和load方式保存和加载文件数据

4.操作文件使用load,需要指定的mode,使用不同的操作,写入的时候使用print并指定file即可

以上纯属个人见解,如有问题请联系本人!

发布了215 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/103074242