今日内容
-
文件处理的基本操作
1,什么是文件
文件是操作系统提供给用户或者说应用程序操作硬盘的一种功能
2,为何要用文件
读写文件就是在读写硬盘:我们对文件的读写操作都会被操作系统转换成硬盘的读写操作‘
应用程序------------------》文件对象,文件句柄
操作系统------------------》文件
硬件------------------------》硬盘
3,如何用文件
操作系统能打开的文件是一定了,文件不用一定要关
f = open(r'a.txt',mode='rt',encoding='utf-8')
print(f)
print(r.read)
f.close() # 回收的操作系统的资源
# del f 一般不需要open发送请求给操作系统打开文件,有返回值
f是文件对象,文件句柄(类似游戏机手柄)
with open(r'a.txt', mode='rt', encoding='utf-8') as f,\
open('b.txt',mode='wt',encoding='utf-8') as f1:
pass
# with会帮你close
-
文件的打开模式
1,控制文件读写操作的模式
r:只读模式,如果文件不存在则报错,则文件指针在文本开头
w:只写模式,如果文件不存在则创建空文档,文件存在则清空,文件指针处于文件开头
总结:w模式,在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面
a:只追加写模式,如果文件不存在则创建空文档,文件存在不会清空,文件指针处于文件末尾
总结:a模式,在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面,这一点与w模式相同
不同的是,在打开了文件关闭然后重新打开的情况下,a模式永远写在后面
2,控制文件读写内容的模式
t:读写都是以字符串为单位的,只适用于文本文件必须指定encoding参数
b:读写都是已bytes为单位的,适用与所有文件,一定不能指定encoding参数
3,可读可写
r+t:指针在开头
w+t:指针在开头但是文件会清空
a+t
r+b
w+b
a+b
r模式
f = open('a.txt',mode='rt',encoding='utf-8')
print(f.read())
print('='*50)
print(f.read())
print(f.readable())
print(f.writable())
f.close()
w模式
f = open('a.txt',mode='wt',encoding='utf-8')
f.write("你好\n")
f.write("哈哈哈\n")
f.write("我擦勒\n")
f.write("你好\n哈哈哈\n我擦勒\n")
print(f.readable())
print(f.writable())
f.close()
a模式
f = open('c.txt',mode='at',encoding='utf-8')
f.write("4444\n")
f.write("555\n")
f.write("6666\n")
print(f.readable())
print(f.writable())
f.close()
b模式
with open('1.mp4',mode='rb') as f:
res = f.read()
print(res.decode('utf-8'))
with open('a.txt',mode='rb') as f:
res = f.read()
print(res.decode('utf-8'))
with open('a.txt',mode='ab') as f:
f.write("啊手动阀手动阀".encode('utf-8'))
# 例:文件拷贝功能
# # 方案一:如果文件过大,内容容易溢出
# with open('1.mp4',mode='rb') as f1,open(r'D:\1111111.mp4',mode='wb') as f2:
# res = f1.read()
# f2.write(res)
# 方案二:
# 储备知识: 一行一行的读
# with open('a.txt',mode='rt',encoding='utf-8') as f:
# # f.read()
# for line in f:
# print(line,end='')
# with open('1.mp4',mode='rb') as f:
# for line in f:
# print(line)
# 具体实现:
# with open('1.mp4',mode='rb') as f1,open(r'D:\1111111.mp4',mode='wb') as f2:
# for line in f1:
# f2.write(line)
可读可写
# with open('a.txt',mode='rt',encoding='utf-8') as f:
# # lines = f.readlines()把读出来的放到列表中
# # print(lines)
#
# print(f.readline()) 读多行
# print(f.readline())
# with open('a.txt',mode='wt',encoding='utf-8') as f:
# # f.write("111\n222\n333\n")
#
# # lines = ['111\n','222\n','3333\n']
# # for line in lines:
# # f.write(line)
#
# # f.writelines(lin es)相当于执行了一个for循环,每取出 一个值就输出一次
#
# f.write('hello')
# f.flush()(刷新,立即将数据送到硬盘)
# # f.writelines('hello')
-
文件指针移动
大前提:只有t模式下的,f.read(n)中的n代表字符个数,关于指针移动的单位都是字节
# f.read()
# with open('a.txt',mode='rt',encoding='utf-8') as f:
# res = f.read(6)
# print(res)
# with open('a.txt',mode='rb') as f:
# # res = f.read(6)
# res = f.read(8)
# print(res.decode('utf-8'))
# f.truncate()# 截断文件,w模式下没有意义,后面的内容都不要了
# with open('a.txt',mode='r+t',encoding='utf-8') as f:
# f.truncate(8)
# f.seek移动的全都是字节个数
# f.seek(字节个数,0)参照文件开头
# f.seek(字节个数,1)参照当前指针
# f.seek(字节个数,2)参照末尾 -