• day 09


    文件处理

    什么是文件处理

    修改存储的信息

    什么是文件

    操作系统提供的虚拟概念,存储信息(用二进制存储信息)

    操作文件的流程

    1.打开文件

    f = open
    

    2.修改/读取文件

    f.write()
    

    3.保存文件

    f.flush()
    

    4.关闭文件

    f.close()
    

    文件的三种打开模式

    读取

    rt read_text 读文本内容 只读
    

    写入(清空写入)

    wt 只写(w清空文件后写入),不可读
    

    追加写入

    at 只写入(追加写入)
    

    打开文件的两种方式

    t --》 文本;b --》二进制模式
    这两个东西不单独使用,一般与r/w/a联用,不需要encoding
    
    # b模式一般用于图片/音频/视频的保存
    
    # w和a模式可以自动创建文件
    

    绝对路径和相对路径

    绝对路径

    从盘符开始

    相对路径

    执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下

    with管理文件上下文

    with提供一个自动关闭文件(接触了操作系统的占用)
    with open('test.py', 'r', encoding='utf8') as f:
        # print(f.read())
        # 在这个缩进下不会关闭文件,在这个缩进下对文件操作
        data = f.read()  # data放到python的内存中
    
    print(data)
    # 关闭文件(操作系统),没有关闭python内存中的文件
    print(f)  # 只涉及python
    

    文件的高级运用

    三种新的模式(可读又可写),尽量不要使用

    r只读/w清空写入/a追加写入 --》要么只读,要么只写

    假设一个文件即可读又可写,假设写需要10s,读需要5s
    
    针对test.py,我们要写入一个国字,需要10s
    
    过了1s,我们读了这个文件,5s过后,我们看到文件只有一个中字
    
    感觉自己没写入,你会再一次写入一个国字(基于前面一个字是中字)
    
    4s过后,第一个的写入成功了,文件变成 中国 了
    
    再过6s,第二次写入一定失败
    
    以前就发生过(现在的电脑牛逼了,所以不会有这种事发生,但是还是有一定概率的)
    

    可写可读 r+

    with open('test.py', 'r+', encoding='utf8') as fr:
        # print(fr.readable())
        # print(fr.writable())
        fr.write('高级')  # 光标在文件头部,覆盖后面的字符
    

    可写可读 w+ 和 w 没有任何区别

    with open('test.py', 'w+', encoding='utf8') as fw:
        print(fw.readable())
        print(fw.writable())
    

    可写可读 a+ a模式默认光标在尾部

    with open('test.py','a+',encoding='utf8') as fw:
        print(fw.readable())
        print(fw.writable())
        fw.seek(0,0)
        print(fw.read())
    

    综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件

    光标的高级应用(移动光标)
    8个进制位为一个字节,3个8进制位组成一个字符(针对中文,英文是一个字节一个字符)
    (00000000-->一个字节 00000000 00000000) --> 一个字符,对应三个字节,对应一个中文 --> utf8

    下三种移动光标的位置(以字节为单位)

    seek

    with open('test.py', 'rb') as fr:
        # fr.seek(5)  # 移动了3个字节,一个中文,默认从开头开始
        # print(fr.read())
        # print(fr.read().decode('utf8'))
    
    whence规定只有0,1,2 三种模式  # 0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾
        fr.seek(3, 0)  # 0从开头
        # print(fr.read().decode('utf8'))
    
    tell : 告诉你当前所在位置
    with open('test.py', 'rb') as fr:
        fr.seek(3, 0)
        print(fr.tell())
    
    truncate: 截断
    with open('test.py', 'ab') as fa:
        fa.truncate(2)
    
    移动光标(以字符为单位)
    read
    with open('test.py', 'r', encoding='utf8') as fr:
        print(fr.read(3))  # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字符
    

    注册登录

    # 注册
    
    count = 0
    while count < 3:
        username_inp = input('请输入你的用户名:')
        pwd_inp = input('请输入你的密码:')
        re_pwd_inp = input('请再次输入你的密码:')
        
        if not pwd_inp == re_pwd_inp:
            print('两次密码输入不一致')
            count +=1
            continue
            
        with open('user_info.txt','a',encoding = 'utf8') as fa:
            fa.write{f'{username_inp}:{pwd_inp}
    '}  # 表示用户名和密码的分割;|用户和用户之间的分割
            fa.flush()
            break
    
    
    # 登录
    
    username_inp = input('请输入你的用户名:')
    pwd_inp = input('请输入你的密码')
    
    
    with open('user_info.txt','r',encoding= 'utf8')as fr:
        for user_info in fr:
            username.pwd = user_info.split(':')
            
            if username.strip() == username_inp and pwd.strip() == pwd_inp:
                print('登录成功')
                break
        else:
            print('登录失败')
                
            
    

    文件的修改

    文件没有修改只有覆盖

    with open('test.py','r',encoding='utf8')as fr,
      open('test_new.py','w',encoding='utf8')as fw:   #同时打开多个文件
      
      data = fr.read()
      data = data.repalce('se','sb')
     
      fw.write(data)
      import os 
      
      os.remove('test.py')
      os.rename('test_new.py','test.py')
    
  • 相关阅读:
    0425正则数组
    0424php函数
    0424php基础
    string类例题
    数组分为一维数组,二维数组,多为数组
    string类 截取的长度 是否包含某个数
    循环语句2
    /异常语句try,catch.
    string类
    循环语句
  • 原文地址:https://www.cnblogs.com/colacheng0930/p/11544628.html
Copyright © 2020-2023  润新知