day11 文件操作(上)

一、什么是文件

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

用户/应用程序

操作系统(文件)

计算机硬件(硬盘)

二、为何要用文件

  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('你好
')
    f.write('我好
') 
    f.write('大家好
')
#强调:
# 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("
{}:{}".format(username,password))

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

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

原文地址:https://www.cnblogs.com/hz2lxt/p/12486517.html