python全栈学习总结四:文件操作
Posted qilvzhuiche
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python全栈学习总结四:文件操作相关的知识,希望对你有一定的参考价值。
一 文件操作步骤
1 打开文件,得到文件的句柄并赋值
2 通过句柄对文件进行操作
3 关闭文件
文件操作的实质是:读取文件到内存中,可以在内存中查看、修改、复制等操作,若是对文件进行了重新修改删除等操作,则是重新写入硬盘中,并不是在原硬盘文件上操作!
二 文件操作实例
1 读取文件
f = open(‘test‘,‘r‘,encoding=‘utf-8‘) #data = f.read() #读取文件所有的内容 # print(f.readable()) #查询文件是否可以读取 # print("第一行",f.readline().rstrip(‘ ‘)) #读取文件一行,去除最后一行的换行标志 # print("第二行",f.readline().rstrip(‘ ‘)) #文件一次读取一行,没读一次,光标会记录读取的位置 # print("第三行",f.readline().rstrip(‘ ‘)) # print("第四行",f.readline().rstrip(‘ ‘)) # print("第五行",f.readline().rstrip(‘ ‘)) # print("第六行",f.readline().rstrip(‘ ‘))#文件已经读完,光标移动最后,所以读不出内容 # print("第七行",f.readline().rstrip(‘ ‘)) print(f.readlines())#读取文件所有的内容,包含回车键也读出了 f.close()
如上:文件读取操作主要有以上函数readable():查询文件是否可以读取 readline():读取文件一行,以换行标志结束 readlines()读取所有的内存,包含换行,存放在一个列表中。 read()默认读取所有的字符,若是带参数如read(10)表示读取10个字符
2 写文件操作
f = open(‘测试‘,‘w‘,encoding=‘utf-8‘) print(f.writable()) f.write(‘骑驴追车‘) #写的内容必须是字符串 f.writelines([‘1111111 ‘,‘222222 ‘,‘扬帆起航‘]) f.close()
如上:write()操作是向文件写入字符串,写的必须是字符串,writeable()查询文件是否可写,writelines()写入的内容是列表,列表中内存是字符串元素
3 追加模式操作
# f = open("测试",‘a‘,encoding=‘utf-8‘) # f.write(‘ 测试追加‘) # f.close() f = open("test",‘r+‘,encoding=‘utf-8‘) #打开文件,可以写 f.write(‘ 测试读写‘) #写的时候 是从光标位置开始写,第一次打开,默认从第一行开始写 f.close()
如上:a表示在源文件基础上进行写操作。
另外除了‘r‘,‘w‘,‘a‘模式外还有‘x’模式,x模式与w模式不同之处主要有x是写操作源文件不存在,则报错,而w不存在则创建,若存在源文件内容都清空。
‘r+’模式是以读的方式打开,可以进行写操作
‘w+’模式是写写的方式打开,可以进行读操作
‘a+’模式是以追加的模式打开,可以进行读操作
‘b’模式是表示以二进制的形式进行读写,如‘rb‘,‘rb+’,‘wb‘,‘wb+‘等操作,默认操作是以文本的形式操作。
winddow系统主要有文本和二进制(字节)的形式操作,底层的实质是把文本字符串转换为二进制,而linux系统均是以二进制形式操作
二进制操作不用指定编码
f = open(‘测试‘,‘rb‘)
4 二进制操作
# f = open(‘二进制测试‘,‘wb‘) # f.write(‘二进制测试读写操作 ‘.encode(‘utf-8‘)) #通过字符串方法encode进行编码操作,写入到文本中 # f.write(bytes(‘字节转换形式操作‘,encoding=‘utf-8‘))#通过字符串操作函数bytes操作,以utf-8编码写入到文本中,进行文本操作 # f.close() f = open(‘二进制测试‘,‘rb‘) data = f.read() print(data.decode(‘utf-8‘)) #读出的数据为二进制编码,通过方法decode进行解码操作,打印出字符串 f.close()
二进制操作方式中不能指定编码,同时注意window系统中回车换行为 ,linux系统中为
文本字符串-----》encode-------->二进制编码
二进制编码-----》decode-------->文本字符串
进行二进制编码的方式有:
‘字符串’.encode(‘utf-8‘)
bytes(‘字符串‘,encoding=‘utf-8‘)
对二进制进行解码的方式有:
‘二进制编码’.decode(‘utf-8‘)
5 文件其他操作函数总结
read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位的如seek,tell,read,truncate操作
f.flush()#把文件内容从内存刷到硬盘中,起到实时保存的作用。
f.closed#文件如果关闭,则返回True
f.encoding#查看使用open打开文件的编码格式,注意并不是文件的实际编码格式
f.tell #查看文件处理当前的光标位置
f.seek(3)#从头开始运算,将光标移动到第三个字节
f.truncate(10)#从头开始运算,将文件只保留从0-10个字节的内容,文件必须是以写的方式打开,但是‘w‘和‘w+’除外。
6 seek方法的高级应用
seek共有2个参数,第一个参数为光标个数,第二个参数默认为0,默认为0时,光标个数是从头开始计数的。
当第二个参数为1时,则光标相对从从上一次的位置操作开始。
当第二个参数为2时,则光标倒着开始计数,例如f.seek(-5,2)表示从尾向前数5个字符开始读取
例,读取操作日志的最后一行。
with open(‘日志‘,‘rb‘) as f: for i in f: #读取文件时,推荐一行一行的读取,节省内存 offset = -10 while True: f.seek(offset,2) #从尾开始插入光标 data = f.readlines() #读出来是一个列表 if len(data) > 1: print(data[-1].decode(‘utf-8‘)) break offset *= 2
以上是关于python全栈学习总结四:文件操作的主要内容,如果未能解决你的问题,请参考以下文章