zoukankan      html  css  js  c++  java
  • Ⅹ:文件处理

    文件

    # 什么是文件
    文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟概念(接口)
    # 为什么要用文件
    用户/应用程序可以通过文件将数据永久保存到硬盘中,即操作文件就是操作硬盘。
    用户/应用程序直接操作的是文件,对文件进行的所有操作都是在向操作系统发送系统调用,然后再由操作系统将其转换成具体的硬盘操作
    # 如何用文件
    控制文件读写内容的模式:t和b, 强调:t和b不能单独使用,必须跟r/w/a连用
    # t文本(默认的模式)
    '''
      1.读写都以str(unicode)为单位的
      2、文本文件
      3、必须指定encoding="存入硬盘时的编码格式"
    '''
    # b二进制/bytes
    # 控制文件读写操作的模式:r/w/a/+
    
    # open()的使用
    

    一、文件操作的基本流程

    基本流程

    打开文件
    # windows路径分隔符问题
    # open('C:a
    bcd.txt')
    # 解决方案一:推荐
    open(r'C:a
    bcd.txt')
    # 解决方案二:
    open('C:/a/nb/c/d.txt')
    
    # 相对路径,从当前路径下开始找,如果文件不存在,则报错
    f=open('a.txt')
    # f的值是一种变量,占用的是应用程序的内存空间,向操作系统发送系统调用并在操作系统中打开资源空间
    print(f) # 文件类型
    读/写文件
    
    # 应用程序对文件的读写请求都是在向操作系统发送系统调用
    # 然后由操作系统控制硬盘把输入读入内存,或者写入硬盘
    res = f.read() # 读文件
    print(res)
    
    f.write("写入内容") # 写文件
    关闭文件
    
    f.close() # 回收操作系统资源
    f.read() # 变量f存在,但是不能再读了
    
    # del f # 回收应用程序资源
    1.2 资源回收与with上下文管理
    # with会在子代码块全部执行完毕后自动执行.close()来关闭文件
    # 文件对象又称文件句柄
    with open('a.txt', mode='rt') as f1:
        res = f1.read()
        print(res)
        
    with open('a.txt', mode='rt') as f1,
        open('b.txt',mode='rt') as f2:
        res1 = f1.read()
        res2 = f2.read()
        print(res1)
        print(res1)
    1.3 指定操作文本文件的字符编码
    # 没有指定encoding参数,操作系统会使用自己默认的编码
    # linux系统默认:utf-8
    # mac系统默认:utf-8
    # windows系统默认gbk
    with open('c.txt', mode='rt', encoding='utf-8') as f:
        # 读文件
        res = f.read() # 因为t模式的影响,会将f.read()读出的结果解码成unicode
        print(res,type(res))
        # 写文件,t模式有局限性,就是只限于文本文件
        f.write('哈哈哈')
        
    # 内存:utf-8格式的二进制———————解码———————》unicode
    # 硬盘(c.txt内容:utf-8格式的二进制)
    

    二、文件的操作模式

    2.1 控制文件读写操作的模式
    2.1.1 案例一:r 模式的使用
    
    # 登陆验证功能
    inp_user = input(">>>>your name:").strip()
    inp_pwd = input(">>>>your password:").strip()
    with open('user.txt', mode='rt', encoding='utf-8') as f:
        for line in f:
            username, password = line.strip().split(':')
            if inp_user == username and inp_pwd == password:
                print('login success')
                break
        else:
            print('账号或密码错误')
    2.1.2 案例二:w 模式的使用
    
    # w模式用来创建全新的文件
    # 文本文件的拷贝工具
    src_file = input('源文件路径>>:').strip()
    copy_file = input('源文件路径>>:').strip()
    with open(r'{}'.format(src_file), mode='rt', encoding='utf-8') as f1,
      open(r'{}'.format(copy_file), mode='wt', encoding='utf-8') as f2:
        res = f1.read()
        f2.write(res)
    2.1.3 案例三:a 模式的使用
    
    # a模式用来再原有的文件内容的基础之上写入新的内容,比如记录日志
    # 注册功能
    name = input('>>>>your name:').strip()
    pwd = input('>>>>your password:').strip()
    with open('db.txt', mode='at', encoding='utf-8') as f:
        f.write('{name}:{pwd}
    '.format(name,pwd))
    2.1.4 案例四:+ 模式的使用(了解)
    
    # +不能单独使用,必须配合r、w、a
    with open('g.txt',mode='r+t',encoding='utf-8') as f:
        # print(f.read())
        f.write('中国')
    
    with open('g.txt',mode='w+t',encoding='utf-8') as f:
        f.write('111
    ')
        f.write('222
    ')
        f.write('333
    ')
        print('====>',f.read())
    
    
    with open('g.txt',mode='a+t',encoding='utf-8') as f:
        print(f.read())
    
        f.write('444
    ')
        f.write('5555
    ')
        print(f.read())
    2.2 控制文件读写内容的模式
    2.2.1 案例一:t 模式的使用
    
    # t模式的存操作
    # 1、r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置
    with open('r.txt', mode='rt', encoding='utf-8') as f:
        print('第一次读'.center(50,'*'))
        res = f.read() # 把所有内容从硬盘读入内存
        print(res)
    
        print('第二次读'.center(50,'*'))
        res1 = f.read() # 把所有内容从硬盘读入内存
        print(res1)
    
    # 2、w:只写模式,当文件不存在时会创建空文件,当文件存在时会清空文件,指针位于开始位置
    '''
    强调1:
    强调2:如果重新以w模式打开文件,则会清空文件内容
    '''
    with open('w.txt', mode='wt', encoding='utf-8') as f:
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
    
    # 3、a:只追加写,在文件不存在时会创建空文档,在文件存在时文件指针会直接跳到末尾
    with open('w.txt', mode='at', encoding='utf-8') as f:
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
        f.write('哈哈哈
    ')
    
    '''
    强调w模式与a模式的异同:
    相同点:再打开的文件不关闭的情况下,连续的写入,新内容总会跟在前写的内容之后
    不同点:以a模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾
    '''   
    
  • 相关阅读:
    LeetCode偶尔一题 —— 617. 合并二叉树
    《剑指offer》 —— 链表中倒数第k个节点
    《剑指offer》 —— 青蛙跳台阶问题
    《剑指offer》—— 二维数组中的查找
    《剑指offer》—— 替换空格
    《剑指offer》—— 合并两个排序的链表
    《剑指offer》—— 礼物的最大价值
    生成Nuget 源代码包来重用你的Asp.net MVC代码
    Pro ASP.Net Core MVC 6th 第四章
    Pro ASP.NET Core MVC 6th 第三章
  • 原文地址:https://www.cnblogs.com/qujiu/p/12488271.html
Copyright © 2011-2022 走看看