zoukankan      html  css  js  c++  java
  • 第九天

    文件处理

    什么是文件

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

    操作文件流程

    1. 打开文件

      f = open(r'文件路径','文件打开模式',encoding = '字符编码') # r 的作用是让文件路径里的/无效化,只是当作字符处理

      f = (r'D:python文件处理	est.txt','r',encoding = utf8) # 如果没有这个r 文件路径中的	就会被当作缩进,使文件路径失效
      
    2. 修改文件

    3. 保存文件

    4. 关闭文件

    文件打开的三种模式

    只读

    r :读取 read的缩写,读取文本的内容,只读

    f.read() 读取文件全部内容

    f = (r'D:python文件处理	est.txt','r',encoding = utf8) 
    f.read()
    

    f.readline() 一行一行的读

    f = (r'D:python文件处理	est.txt','r',encoding = utf8) 
    f.readline() 
    

    f.readlines() 读取所有行放入列表,把所有行都要拿出来,不能分段处理

    f = (r'D:python文件处理	est.txt','r',encoding = utf8) 
    f.readline() 
    

    对于 逐行读取而言完全可以用for循环

    for i in f.read:
         print(i)# 循环每一个字符
    for i in f:
         print(i)# 循环每一行
    
    

    文本读一行少一行,每一行末尾默认有一个换行

    for i in f: 
        print(i)
    print('f.readline():',f.readline())
    

    清空后写入

    w:write 只写(清空后写入),不可读

    f = (r'D:python文件处理	est.txt','r',encoding = utf8) 
    f.write()
    

    f. writelines() 自动拼接列表元素,一行写入

    print(f. writelines(['abc','def']) ) # abcdef
    

    追加写入

    a: 只写入(追加写入)不可读

    *w和a模式可以自动创建文件

    打开文件的两种方式

    t—–>打开文本文件

    b—–>打开二进制文件,一般用于图片/音频/视频的保存

    这两个东西一般单独使用,一般与r/a/w连用

    绝对路径和相对路径

    绝对路径:

    从盘符开始如D:python文件处理 est.txt

    相对路径:

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

    未来写项目的时候尽量使用相对路径,一般都是再Windows上写代码,再部署到Linux系统上,相对路径不容易丢失

    with管理文件上下文

    为了方便使用,with提供了关闭文件的方式

    with open(r'D:python文件处理	est.txt','r',encoding = utf8)as f:
    	print(f.read())
       
    

    with 打开文件下面会有个缩进,对文件的操作要写再缩进里,在这个缩进下文件不会关闭

    with 关闭文件并不会解除文件在python中的内存占用,只会关闭操作系统中的文件,还是可以通过变量名打印出来它的类型

    with open(r'D:python文件处理	est.txt','r',encoding = utf8)as f:
    	print(f.read())
    print(f) # <_io.TextIOWrapper name='test.txt' mode='r' encoding='utf8'>
    

    文件的高级应用

    仅作了解,因为并不会用到

    r+

    可读可写

    光标在文件的头部,写入会覆盖后面的字符

    w+

    w+ 和w 并有什么区别

    a+

    可读可写

    a模式默认光标在文件尾

    通过对以上三种方式的了解,如果有可读可写的需求,可以用两种方式打开两次文件

    光标的高级应用

    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相当于文件末尾

     fr.seek(3, 0)  # 0从开头
        # print(fr.read().decode('utf8'))
        fr.seek(3, 1)
        print(fr.read().decode('utf8'))
        fr.seek(0, 2)
        print(fr.read())
    

    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)
    
    

    文件的修改

    文件没有修改一说,只能覆盖

    缓存文件的原理

    # 同时打开多个文件
    with open('test.py', 'r', encoding='utf8') as fr, 
            open('test_swap.py', 'w', encoding='utf8') as fw:
        data = fr.read()
        data = data.replace('sb', '傻逼')
        fw.write(data)
        
        
    
    import os
    
    os.remove('test.py')
    os.rename('test_swap.py', 'test.py')
    with open('test.py', 'r', encoding='utf8') as fr, 
            open('test_swap.py', 'w', encoding='utf8') as fw:
        # 再大的文件都能修改
        for i in fr:
            s = '傻逼'
            i = i.replace('sb', s)
            fw.write(i)
    

    简单的登录注册

    # 注册
    print('注册功能')
    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(f'user_info.txt', 'a', encoding='utf8') as fa: # 将用户名密码保存到文件里
            fa.write(f'{username_inp}:{pwd_inp}
    ')
            fa.flush()  # 刷新,先保存再运行
            break
    # 登录
    
    print('登录功能')
    username_inp = input('请输入你的用户名:')
    pwd_inp = input('请输入你的密码:')
    with open(f'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('登录失败')
    
    
  • 相关阅读:
    用小程序&#183;云开发两天搭建mini论坛丨实战
    巧用小程序&#183;云开发实现邮件发送功能丨实战
    借助云开发,10行代码实现小程序支付功能!丨实战
    你的心事我全知晓——心情日记小程序丨实战
    只需20小时,让0基础的你掌握小程序云开发!这个暑假,约否?
    诗词歌赋,样样精通!诗词古语小程序带你领略魅力古风丨实战
    在线教育项目-day02【后台讲师管理模块】
    在线教育项目-day02【搭建项目结构】
    在线教育项目-day01【wrapper条件构造器】
    在线教育项目-day01【性能分析插件】
  • 原文地址:https://www.cnblogs.com/lyyblog0715/p/11545051.html
Copyright © 2011-2022 走看看