Python3 —— 文件
前言:当我们想做数据数据持久化的时候。我们可以操作文件,将自己的数据保留到文件当中。其中文件是操作系统提供给应用程序来操作硬盘虚拟概念,操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用。简单的说通过这些接口我们可以把数据存储在硬盘中,在需要的时候可以进行增删改查等操作。
一、基本流程
文件的读写操作可以简单的分成三部
(1) 打开文件,得到文件句柄并赋值给一个变量
(2) 通过句柄对文件进行操作
(3) 关闭文件
例:
>>> f = open('chenli.txt') #打开文件
>>> first_line = f.readline()
>>> print('first line:',first_line) #读一行
>>> data = f.read()# 读取剩下的所有内容,文件大时不要用
>>> print(data) #打印读取内容
>>> f.close() #关闭文件
二、文件打开方式
(1)由应用程序向操作系统发起系统调用open(...)
(2)操作系统打开该文件,并返回一个文件句柄给应用程序
(3)应用程序将文件句柄赋值给变量f
>>> f=open('a.txt','r',encoding='utf-8')
文件打开方式:
文件句柄 = open('文件路径', '模式')
文件句柄 = open('文件路径', '模式',encoding='编码')
模式介绍:
注:
1、打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:
(1)f.close() #回收操作系统级打开的文件
(2)del f #回收应用程序级的变量
2、f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。
三、文件操作
(1)读
>>> f.read() #读取所有内容,光标移动到文件末尾
>>> f.readline() #读取一行内容,光标移动到第二行首部
>>> f.readlines() #读取每一行内容,存放于列表中
(2)写
#针对文本模式的写,需要自己写换行符
>>> f.write('1111\n222\n')
#针对b模式的写,需要自己写换行符
>>> f.write('1111\n222\n'.encode('utf-8'))
>>> f.writelines(['333\n','444\n']) #文件模式
>>> f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式
(3)改
目前没有发现直接修改文件里面一段内容的方法。所以需要自己写,思路如下:
——从文件中找到需要修改的内容的位置
——然后从位置上替换内容
——把新的内容写入文件中
# 修改:
>>> f = open("file","r",encoding="utf-8")#打开原始文件
>>> f_new = open("file2","w",encoding="utf-8")#打开要修改的文件
>>> for line in f :
>>> if "五五五五五五" in line:#找到要修改的内容
>>> line = line.replace("五五五五五五","三三三三三三")#替换内容
>>> f_new.write(line)#写入到要修改的文件中
>>> f.close()#关闭文件
>>> f_new.close()
(4)with语句
# 避免打开文件忘记关闭,可以通过with管理上下文:
>>> with open("file", "r",encoding="utf-8") as f:
for line in f:
print(line)
# 通过with代码块执行完毕,内部会自动关闭并释放文件资源
#Python2.7以后 with可以打开多个文件,
>>> with open("file", "r",encoding="utf-8") as f,\
open("file2", "r",encoding="utf-8") as f1:
(5)常用操作
>>> f.readable()——文件是否可读
>>> f.writable() ——文件是否可读
>>> f.closed ——文件是否关闭
>>> f.encoding ——如果文件打开模式为b,则没有该属性
>>> f.flush() ——立刻将文件内容从内存刷到硬盘
>>> seek()——指定文件指针的位置
>>> seek(0)——把指针移动到文件开头处
>>> tell()——获取文件指针的位置
四、file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
注:目前有关——文件知识,只研究到该阶段,后续如有发现新的用法,将继续添加。