文件操作

1.文件,什么是文件?
文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟接口

计算机三层体系结构:用户/应用程序 open()
操作系统(文件)
计算机硬件(硬盘)
2.为什么要用文件?
用户/应用程序可以通过文件将数据永久的保存在硬盘中,即操作文件就是操作硬盘
用户/应用程序直接操作的是文件,对文件进行的操作都是在向操作系统发送系统调用,
然后在由操作系统转换成具体的硬盘操作
3.如何使用文件?open()
控制文件读写内容的模式 t/b
t/b不能单独使用 要和r/w/a联合使用

t文本(默认的模式)
1.读写都是以str(unicode)为单位
2.文本文件
3.必须制定encoding="utf-8"

b二进制/bytes

控制文件读写操作的模式
1.r 只读模式
2.w 只写模式
3.a 只追加写模式
4.+:r+/w+/a+
# 1.打开文件
# window路径分隔符问题
# open('C:a.txt bcd.txt')
# 解决方案一:推荐
# open(r'C:a.txt bcd.txt') #正常路径前面加r
# 解决方案二:
# open('C:/a.txt/nb/c/d.txt') #反斜杠方式

f=open(r"hahaa.txt",mode="rt")#f的值是一种变量,占用的是应用程序的内存空间
print(f)

# 2.操作文件:读/写文件,应用程序对文件的读写请求都是在向操作系统发送系统调用
#然后由操作系统控制硬盘把输入读入内存或写入硬盘
f=open(r"hahaa.txt",mode="rt")
res=f.read()
print(res,end=" ")
print(type(res))
# 3.关闭文件
# f.close()#回收操作系统资源
# f.read()#变量f 存在,但是不能在读了
# del f #回收应用程序资源

# 以t 模式为基础进行内存操作
# 1.r(默认的操作模式) :只读模式,当文件不存在时报错,文件存在时指针跳转到开始位置
# with open("haha/a.txt",mode="rt",encoding="utf-8")as f:
# print("第一次读".center(50,"*"))
# res=f.read()
# print(res)
# with open(r"hahaa.txt",mode="rt",encoding="utf-8")as f:
# print("第二次读".center(50,"*"))
# res=f.read()
# print(res)


# print("案例分析".center(20,"="))
# user_name=input("请输入你的账号:")
# user_password=input("请输入你的密码:")
# with open(r"hahauser.txt",mode="rt",encoding="utf-8")as f:
# # res=f.read()
# # print(res)
# for line in f:
# # print(line)
# name,password=line.strip().split(":")
# if user_name==name and user_password==password:
# print("登录成功")
# break
# else:
# print("登录失败")
# print("="*20)

# user_name=input("请输入你的账号:")
# user_password=input("请输入你的密码:")
# with open("haha/d.txt",mode="at",encoding="utf-8")as f:
# f.write("{}:{} ".format(user_name,user_password))
# print("恭喜你注册成功!")
# with open(r"hahad.txt",mode="rt",encoding="utf-8")as l:
# res=l.read()
# print(res)

# print("案例分析:用户注册".center(30,"="))
# name=input("输入你的账号:")
# password=input("输入你的密码:")
# with open("haha/d.txt",mode="at",encoding="utf-8")as f:
# f.write("{}:{} ".format(name,password))
# print("恭喜你注册成功!")
# print("="*30)
# with open(r"hahad.txt",mode="rt",encoding="utf-8")as l:
# res=l.read()
# print(res)
# print("*"*30)
# user_name=input("账号:")
# user_password=input("密码:")
# with open("haha/d.txt",mode="rt",encoding="utf-8")as k:
# for line in k:
# name,password=line.strip().split(":")
# if user_password==password and user_name==name:
# print("login success!")
# break
# else:
# print("login default!")


# 应用程序------》文件
# 应用程序------》数据库管理软件-------》文件
# 2.w :只写模式,当文件不存在时创建空文件,当文件存在时会清空文件,指针位于开始位置
# with open(r"hahae.txt",mode="wt",encoding="utf-8")as a:
# # res=a.read()#不能进行读操作 会报错
# a.write("你好啊 小傻瓜")
#强调1 在以w 模式打开文件没有关闭的条件下,连续写入新的内容总会跟在旧的内容后面
# with open("haha/e.txt",mode="wt",encoding="utf-8")as a:
# a.write("哈哈 ")
# a.write("哈哈哈 ")
# a.write("哈哈哈哈 ")
#强调2 重新以w 模式打开文件 则会清空内容
with open(r"hahae.txt",mode="wt",encoding="utf-8")as a:
a.write("你好啊 小傻瓜")
with open("haha/e.txt",mode="wt",encoding="utf-8")as a:
a.write("哈哈哈哈 ")


#w 模式用来创造新的文件
#文件的copy工具
# src_file=input("输入源文件路径》:").strip()
# new_file=input("输入源文件路径》:").strip()
# with open(r"{}".format(src_file),mode="rt",encoding="utf-8")as f1,
# open(r"{}".format(new_file),mode="wt",encoding="utf-8")as f2:
# res=f1.read()
# f2.write(res)

#3.a 只追加写 如果文件不存在 ,创建空文件;如果文件存在 ,文件指针会掉到末尾
# with open("haha/e.txt",mode="at",encoding="utf-8")as f:
# # f.read()#报错 不能进行读操作
# f.write("小朋友你是不是有很多问好?")

#强调 w模式与a模式异同
#相同点:在打开文件不关闭的情况下,连续的写入,新的内容总是跟在原有内容的后面
#不同点:以a模式打开文件不会清空原文件内容,会将文件指针移动到末尾,在文件内容末尾添加内容
# 使用a 可以实现注册功能
# name=input("账号》:")
# psw=input("密码》:")
# with open("haha/f.txt",mode="at",encoding="utf-8")as q:
# q.write("{}:{} ".format(name,psw))
# with open("haha/f.txt",mode="rt",encoding="utf-8")as q:
# res=q.read()
# print(res)



# +不能单独使用 必须结合r w a 一同使用
# with open("haha/a.txt",mode="rt+",encoding="utf-8")as f:
# # f.write("小朋友你是不是很可爱 ")
# res=f.read()
# print(res)
with open("haha/a.txt",mode="w+t",encoding="utf-8")as a:
a.write("你好")
res=a.read()
print(res)