前言:在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.3 with上下文管理:解决经常会忘记关闭文件句柄,造成资源浪费,所以处理文件是往往使用 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 requests
url = '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 表示偏移参考,默认为 0
0 表示偏移参考文件的开头,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))
#响应:
我是新
我