python之路day8 文件操作
文件操作流程
1,打开文件,产生文件句柄。
2,对文件句柄进行操作。
3,关闭文件句柄。
#1. 打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 通过句柄对文件进行操作 data=f.read() #3. 关闭文件 f.close()
open(file, mode='r', encoding=None) #file 文件的路径及名称 #mode为文件操作模式(只读,只写,读写),默认为只读 #encoding为文件以什么编码方式打开或写入,中文windows系统默认的是GBK,若要保证不乱码,文件以什么方式存的,就要以什么方式打开
打开文件的模式有(默认为文本模式):
r .只读模式(默认模式,文件必须存在,不存在则抛出异常)
w.只写模式(不可读;不存在则创建;存在则清空内容)
a. 只追加写模式(不可读;不存在则创建;存在则只追加内容)
r+.读写模式(先读后写的话是在读完的内容后面写,不读直接写的话是直接覆盖前面的内容)
w+.写读模式
a+.写读模式
对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb wb ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
文件内容读取的方法
f=open('a.txt','r',encoding='utf-8')
f.read()#全部读取
f.read(n)#读取n个字符,rb模式下按字节读取
f.readline()#按行读取
f.readlines()#按行读取返回一个列表
for line in f:
print(line.strip())
文件操作的常用方法:
readale 判断当前文件句柄是否可读
writable 判断当前文件句柄是否可写
seek 调整光标位置 跳到末尾是seek(0,2)
# f = open('文件操作1',encoding='utf-8')
# f.seek(6) # 按照字节去移动光标
# content = f.read()
# print(content)
# f.close()
tell 告知当前光标的位置 也是按字节来
truncate 要在writable模式下进行截取。
# r+ a+ ..不能在w模式下使用,对原文件进行截取
# f = open('文件操作1',mode='r+',encoding='utf-8')
# print(f.truncate(6))
# f.close()
with语句
为了避免打开文件后忘记关闭,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
# 1,主动关闭文件句柄 with open('文件操作2',encoding='utf-8') as f1: print(f1.read()) # 2,开启多个文件句柄。 with open('文件操作2',encoding='utf-8') as f1,\ open('文件操作3',encoding='utf-8',mode='w') as f2: print(f1.read()) f2.write('666666')
文件的改的操作
# 1,以读的模式打开原文件,产生一个文件句柄f1.
# 2,以写的模式创建一个新文件,产生一个文件句柄f2.
# 3,读取原文件内容,进行修改,并将修改后的写入新文件。
# 4,将原文件删除。
# 5,将新文件重命名成原文件。
import os with open('alex的深度剖析', encoding='utf-8') as f1,\ open('alex的深度解析1',encoding='utf-8',mode='w') as f2: for line in f1: new_line = line.replace('NB','alex') f2.write(new_line) os.remove('alex的深度剖析') os.rename('alex的深度解析1', 'alex的深度剖析')