前言:在Python编码中,我们经常会遇到去操作文件的读取和写入,这一方法属于是必备的操作技巧了,现在就一起来康康要怎么操作吧

一、open 函数

python 提供内置函数 open()实现对文件的操作。python 对文本文件和二进制文件采用统一的操作步骤,和把大象放冰箱里的一样分三步,”打开-操作-关闭。”

open(file, mode='r', encoding=None)#file 包含文件名的字符串,可以是绝对路径,可以是相对路径。#mode 一个可选字符串,用于指定打开文件的模式。默认值 r 表示文本读。#encoding 文本模式下指定文件的字符编码

a)mode参数:

字符 意义'r' 文本读取(默认)'w' 文本写入,并先清空文件(慎用),文件不存在则创建'x' 文本写,排它性创建,如果文件已存在则失败'a'文本写,如果文件存在则在末尾追加,不存在则创建

a)和mode组合的字符:

字符意义'b'二进制模式,例如:'rb'表示二进制读't'文本模式(默认),例如:rt 一般省略 t'+'读取与写入,例如:'r+' 表示同时读写

c)总结图

二、读文件

2.1在当前目录下创建一个名为 a.txt 的文本文件,文件中写入下面的内容:

这里是第一行句子这是是第二行句子这里是第三行句子

读取的文本图例:

——操作步骤:

#open打开文件fb = open(file=r"C:\Users\LX\PycharmProjects\pythonProject\web_study\a.txt",mode="r",encoding="utf-8")#读取文件ct = fb.read()#打印文件内容print(ct)#手动关闭文件fb.close()响应:这里是第一行句子这是是第二行句子这里是第三行句子

2.2 相对路径与绝对路径:

#进行文件处理时经常会碰到相对路径和绝对路径的问题#打开文件,读取数据。文件的完整路径必须存在,不然就会报错——————————————————————————————————————————————————————————————————绝对路径:它指定了文件在电脑中的具体位置,以 windows 电脑为例:d:\class\demon\python入门.py相对路径:一般是指相对当前脚本的路径,比如上面的案例中的 a.txt#相对路径的写法:#为和当前脚本在同一个文件夹下,所以可以直接使用 test.txt 作为文件名来操作。with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:#读取文件ct = fb.read()#打印文件内容print(ct)

2.3with上下文管理:解决经常会忘记关闭文件句柄,造成资源浪费,所以处理文件是往往使用 with 语句进行上下文管理

with + open(文件地址)as 函数名:不需要你手动调用fs.close()自动帮你关闭文件with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:ct = fb.read()print(ct)

2.4多种读文件的方式:

a)read()

with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:ct = fb.read() print(ct)响应:这里是第一行句子这是是第二行句子这里是第三行句子
#在读模式下,使用文件对象的 read 方法可以读取文件的内容。它接收一个整数参数表示读取内容的大小,文本模式下表示字符数量,二进制模式下表示字节大小。with open('a.txt', 'r', encoding='utf-8') as f:content = f.read(3)print(content)响应:共计三个字符我是新

b)readline()

with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:vt = fb.readline()print(vt)#响应:这里是第一行句子

c)readlines()

with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:bt = fb.readlines()print(bt)响应:"\n"换行符的字符体现,读出来就是这样表现['这里是第一行句子\n', '这是是第二行句子\n', '这里是第三行句子\n']

d)二进制读取:# mode=rb,不需要encoding参数

# mode=rb,不需要encoding参数with open(file=r"a.txt",mode="rb") as fb:content=fb.read()print(content)#响应:b'\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe7\xac\xac\xe4\xb8\x80\xe8\xa1\x8c\xe5\x8f\xa5\xe5\xad\x90\r\n\xe8\xbf\x99\xe6\x98\xaf\xe6\x98\xaf\xe7\xac\xac\xe4\xba\x8c\xe8\xa1\x8c\xe5\x8f\xa5\xe5\xad\x90\r\n\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe7\xac\xac\xe4\xb8\x89\xe8\xa1\x8c\xe5\x8f\xa5\xe5\xad\x90\r\n'

二、写文件

a)mode=”w”:

with open(file=r"a.txt",mode="w",encoding="utf-8") as fb:fb.write("我是新写入的内容")文本内容:我是新写入的内容

运行后会发现之前a.txt 内容修改为“我是新写入的内容”,因为w模式会清除原文件内容,所以小心使用。

b)mode=”a”:

#\n代表换行符,使用就换行with open(file=r"a.txt",mode="a",encoding="utf-8") as fb:fb.write("我是第二次写入的内容\n")文本内容:我是新写入的内容我是第二次写入的内容

c).写二进制文件:将图片二进制信息写入文件中,并存到本地。

import requestsurl = 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1247698508,1430079989&fm=26&gp=0.jpg'response = requests.get(url)with open('校花.jpg', 'wb') as f:f.write(response.content)

c)结果图例:

三、tell 方法:文件对象的 tell 方法返回整数,表示文件指针距离文件开头的字节数

with open('a.txt', 'r', encoding='utf-8') as f:print(f.tell()) #文件指针距离文件开头的字节数content = f.read(3)print(content)print(f.tell())#文件指针距离文件开头的字节数响应:0我是新9

四、seek 方法:通过文件对象的 seek 方法可以移动文件句柄

seek 方法接收两个参数:offset 表示偏移指针的字节数whence 表示偏移参考,默认为 00 表示偏移参考文件的开头,offset 必须是 >=0 的整数1 表示偏移参考当前位置,offset 可以是负数2 表示偏移参考文件的结尾,offset 一般是负数

注意文本模式下只允许从文件的开头进行偏移,也即只支持 whence=0

with open('a.txt', 'r', encoding='utf-8') as f:print(f.read(3))# 跳转到文件开头f.seek(0)# 再读取第一个字print(f.read(1))#响应:我是新我