1.什么是文件?
文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位
文件的核心操作就是:读和写
即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序对
文件的读写操作转换成具体的硬盘指令,(比如控制盘片转动)
2.为什么要有文件?
应为内存无法保存数据,但凡我们想要永久保存数据都需要保存到硬盘,而操作文件就可以实现对硬件的操作
3.如何用文件
文件三步骤:
1.rawstring 原生字符 去除\符号是转义,在字符串前面加个r
f=open(r'E:\SH_fullstack_s2\day8\a.txt',mode='r') 告诉操作系统准备条件
向操作系统发起请求,要求操作系统打开文件,占用操作系统的资源
2.f.read() 读写
向操作系统打开发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
3.f.close 关闭
向操作系统发起请求,要求操作系统同关闭文件,回收系统资源
总结:1.打开文件 2. 读写文件 3.关闭
4.文件的打开方式
1.控制读写文件内内容的结果有两种 :
1. t模式 text #文本文件模式
2.b模式bytes 二进制模式
注意:
t与b这两种模式不能单独使用,都需要与r/w/a 之一连在一起使用
2.默认的内容格式是t
3.只要文本文件才能用t模式,也只有文本文件才有字符编码
#操作文件的基础模式有三种:
1.r,读-默认的
2.w 写
3.a 追加
##### r:read
1.只读模式
2.在文件不存在时,会报错,
在文件存在时候会将文件指针移动到开头
#f=open(r'b.txt',mode='rt',encoding='utf-8')
# data1=f.read() 全部读出来是字符串模式
# print('第一次:',data1) # 第一次全部读完,指针到末尾
# print(type(data1))
# # data2=f.read()
# # print('第二次:',data2) #读第二次的时候,什么也读不到
# f.close()
#####读完一次后关闭掉,再读才可以#####
#f=open(r'b.txt',mode='rt',encoding='utf-8')
# data2=f.read()
# print('第二次:',data2)
# f.close()
## f.readable() #判断文件是否可读
##print(f.readline() ,end=‘ ’) #一次读一行,最后把换行符去掉 读出来类型字符串
# #print(f.readlines()) #读每一行内容,并把读到的内容通过列表显示 读出来列表
######w:只写模式
1.只能写,不能读
2.在文件不存在时会创建空文件,在文件存在是时候会将文件内容清空
#f=open(r'c.txt',mode='wt',encoding='utf-8')
#f.write('5555'\n) 只能写字符串
#f.wite('1111\n2222\n')
#lines=['1111\n','2222\n','33333\n']
# # for line in lines:
# # f.write(line)
# f.writelines(lines) #将列表里面中内容一个个写入文件
元组是一次性写进去
# f.close()
#####a:只追加写模式
1.只能写,不能读
2.在文件不存在时会创建空文件,在文件存在的时候会将指针移动到文件末尾
# f.write('555555\n6666\n') #指定内容写,需要注意换行问题
# f.writelines(['77777\n','8888888\n','999999999\n']) #将列表内容写入文件
# f.close()
#####b.二进制模式
注意:1、一定不能指定字符编码,只有t模式才与字符编码有关
2、b是二进制模式,是一种通用的文件读取模式,因为所有的文件在硬盘中都是以二进制形式存放
#f=open('oldsiji.mp4','rb')
# data=f.read()
# print(data)
# f.close()
####循环读#### # 可以读大文件
# f=open('d.txt','rt',encoding='utf-8')
# for line in f:
# print(line)
# f.close()
# f=open('d.txt','rb')
# for line in f:
# print(line)
# f.close()
# f=open('oldsiji.mp4','rb')
# for line in f:
# print(line)
# f.close()
# f=open('e.txt','wb')
# f.write('你好啊'.encode('utf-8')) #二进制模式下写字符,需要在后面加入字符编码
#
# f.close()
# f=open('e.txt','ab')
# f.write('大家好,我是egon'.encode('utf-8'))
# f.close()
####上下文管理##
# with open('e.txt','rb') as f,open('j.txt','wt',encoding='utf-8') as f1: #with 统一管理 as 赋值给 f
# #文件的操作 #可以管理多个
# src_data=f.read()
# res=src_data.decode('utf-8') 内容是字符,读是二进制模式,所以需要加字符编码
# # print(res,type(res))
# f1.write(res)
with open('e.txt','rb') as f,\ #换行,有利于方便管理
open('j.txt','wb') as f1:
#文件的操作
f1.write(f.read())
f.close()