一、什么是文件

文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟概念/接口

用户/应用程序

操作系统(文件)

计算机硬件(硬盘)

二、为何要用文件

  1. 用户/应用程序可以通过文件将数据永久保存在硬盘上
  2. 操作文件就是操作硬盘
  3. 用户/应用程序直接操作的是文件,对文件进行的操作就是在向操作系统发送系统调用,再由操作系统将其转化成具体的硬盘操作

三、如何使用文件

3.1文件操作的基本流程

#1.打开文件,由程序想操作系统发起系统调用open()操作系统打开该文件,等于在硬盘上开辟了一个空间并给一个返回值给f
f = open("a.txt",mode="rt",encoding="utf-8")
#2.调用文件对象的xx方法,会被操作系统转换成操作硬件的操作
data = f.read()
#3.在完成对文件的操作后需要关闭文件,以免对操作系统造成资源浪费

3.2资源回收with上下文管理

通过上面这张图我们可以看出来,打开一个文件会占用两部分资源:

第一、应用程序为了对文件操作定义的文件对象在内存中占用空间

第二、操作系统为了建立应用程序和硬盘的联系打开的文件资源

所以在每次文件操作结束后,我们都需要对这两部分资源进行回收

f.close()#回收操作系统打开的文件资源
del f #回收应用程序定义的文件变量

在这里必须先关闭文件再回收变量,否则会找不到该文件导致无法关闭,通常情况下del f不需要写,因为python存在垃圾回收机制,f.close()等于把变量值和f的对应关系断开了。所以只要记住每次都要在最后写close操作。但还是有时候可能会忘记,所以python为了开发人员的方便,提供了with关键词来管理上下文

with打开文件的方式

with open("a.txt","rt",encoding="utf-8") as f:
f.read()
#可以用with打开多个文件,用逗号分隔
with open("a.txt","rt") as f1,open("b.txt","w") as f2:
pass

3.3指定操作文本的字符编码

上节课我们学到了,要让文件不出现乱码,就要统一编码解码用的字符编码,用什么存就要用什么取。其中如果我们不指定打开文件的时候用什么字符编码打开,就会使用操作系统默认的打开。

mac,linux 操作系统默认的是 utf-8

windows 操作系统默认的是 GBK

我们使用的pycharm默认使用utf-8存放,这时候我们用pycharm写了一个文本,在Windows操作系统下若没有定义打开文本的字符编码,就会用GBK打开,就会报错,如下图

f = open("a.txt",r,encoding="utf-8")#正确写法

四、文件的操作模式

t文本(默认模式)

  1. 默认都是以str(unicode)为单位的
  2. 文本文件
  3. 必须指定encoding=‘utf-8’

b 二进制/bytes

4.1控制文件读写操作的模式(t模式)

  1. r(不写默认):只读
  2. w:只写
  3. a:只追加写
  4. +:r+,w+,a+

4.1.1案例1:r模式的使用

#r只读模式,文件不存在时报错,文件存在则把指针跳到开头
with open("a.txt",mode="rt",encoding="utf-8") as f:
res = f.read()#把文件的所有内容都赋值给res
print(res) #小练习,实现登录功能
name_inp = input("your name>")
pwd_inp = input("your pws>")
with open("a.txt",mode="rt",encoding="utf-8") as f :
for line in f:
username,password = line.strip().split(":")
if username == name_inp and password == pwd_inp:
print("welcome")
break
else:
print("账号名或者密码错误")

4.1.2案例二:w模式的使用

#w只写模式,如果文件不存在则创建新文件,文件存在会清空文件,光标回到文件开头
with open('b.txt',mode='w',encoding='utf-8') as f:
f.write('你好\n')
f.write('我好\n')
f.write('大家好\n')
#强调:
# 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
# 2 如果重新以w模式打开文件,则会清空文件内容

4.1.3案例三:a模式的使用

#a值追加写模式:文件不存在则创建文件,文件存在则把光标跳到文件末尾
with open("a.txt",mode="a",encoding="utf-8") as f :
f.write("aaa")
#w模式和a模式的异同:
#相同点:打开文件不关闭的情况下,连续写入新内容,新写的内容会跟在之前写的后面
#不同点:w模式打开文件会清空文件,a模式只会让光标跳到最后
#练习:实现注册功能: username = input("请输入注册的用户名:")
password = input("请输入注册的密码:")
with open("a.txt",mode="a",encoding="utf-8") as f :
f.write("\n{}:{}".format(username,password))

4.1.4案例四:+模式的使用(了解)

r+,w+,a+都是可读可写,但平时不会用

最新文章

  1. 组件RecyclerView的应用(一)
  2. java父类与接口有相同的方法
  3. leetcode6
  4. zabbix问题处理
  5. Biee 迁移和刷新GUIDs
  6. HTML 折行 <br/>标签
  7. A Walk Through the Forest[HDU1142]
  8. python 内置模块之logging
  9. Android开发之onActivityResult()中的resultCode为0,intent为null的解决办法
  10. Swift开发语法
  11. cf C. Knight Tournament
  12. vi/vim多行注释和取消注释
  13. JavaScript在智能手机上的应用-用手势来改变图片大小
  14. margin:0 auto
  15. [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary
  16. java之IO流详解(一)
  17. .Net机试题——编写一个BS架构的多层表结构的信息管理模块
  18. android: 接收系统广播
  19. task_payment_byonlinedown
  20. js贪心算法---钱币找零问题

热门文章

  1. jdbc+mysql常见报错总结
  2. airpods2隐藏的使用技巧(十)点
  3. Redis学习笔记(十八) 集群(下)
  4. iOS简历书写注意事项
  5. CentOS7.5搭建Hive2.3.3
  6. mongodb 数据库 增删改查
  7. docker安装mysql,设置mysql初始密码
  8. 729. My Calendar I
  9. shell 脚本操作informix数据库
  10. 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化