zoukankan      html  css  js  c++  java
  • 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+都是可读可写,但平时不会用

  • 相关阅读:
    Vue之数据排序加签
    微信小程序之评分页面
    Vue之展示PDF格式的文档
    动态规划问题思考(DP)
    LitJson的使用
    c#事件管理器
    unity shader 学习
    unity ugui图片自适应文字内容大小
    unity3d各种OpenFileDialog操作
    ue4 使用3dsmax制作布料的插件及下载位置
  • 原文地址:https://www.cnblogs.com/hz2lxt/p/12486517.html
Copyright © 2011-2022 走看看