学习来源: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即可
以上纯属个人见解,如有问题请联系本人!