zoukankan      html  css  js  c++  java
  • day 09 可读可写 文件内指针移动 文件指针移动的相关其他操作 修改文件内容的两种方式 函数初体验 函数的定义与调用 定义函数的三种形式

    #r+t:可读、可写   写的时候不会清空,会覆盖掉

    with open('c.txt','r+t',encoding='utf-8')as f:
        f.seek(21,0)
        f.write('我擦啊')

    #w+t:可写、可读

    with open('b.txt','a+t',encoding='utf-8')as f:
    f.write('王苗鲁')
    print(f.writable())#True
    print(f.readable())#True 从根本上讲是w模式

    #a+t:可追加写、可读

    with open('b.txt','w+t',encoding='utf-8')as f:
        f.read()
        print(f.writable())#True
        print(f.readable())#True   从根本上讲是w模式
    
    复杂的方法
    with open('b.txt',mode='rb') as f:
        data=f.read()
        print(data.decode())
    
    简单的方法
    with open('b.txt',mode='rt',encoding='utf-8') as f:
        data=f.read()
        print(data)
    with open('b.txt',mode='r+',encoding='utf-8')as f:
        print(f.readline(),end='')
        print(f.readline(),end='')
        print(f.readline(),end='')
    r+模式永远往末尾加
    

    f=open('c.txt',mode='r',encoding='utf-8)
    #f.seek(offset,whence)
    offset代表文件的指针的偏移量,单位是字节bytes
    whence代表参照物,有三个取值 0,1,2
    0:参照文件的开头
    1:参照当前文件指针所在的位置
    2:参照文件末尾
    ps:快速移动到文件末尾f.seek(0,2)

    whence=0,t和b模式都能用,whence=1和2只能在 b模式下使用
    #强调:其中whence=1和whence=2只能在b模式下使用

    f=open('c.txt',mode='rt',encoding='utf-8')
    f.seek(9,0)
    print(f.tell())#(告诉光标当前所在位置)每次统计都是从文件开头到当前指针所在的位置
    f.close()

    文件指针移动的相关的其他操作

    文件:大多数人的帅都是浮在表面的帅,只有egon 的帅才是发自内心的

    只有在t模式下的read(n),n代表的是字符个数,除此之外其他但凡涉及到文件指针的操作
    都是以字节为单位的

    f=open('c.txt',mode='rt',encoding='utf-8')
    print(f.read(3))#大多数
    f.close()
    
    f=open('c.txt',mode='rb')
    print(f.read(3).decode('utf-8'))#大
    f.close()  

    修改文件内容的第一种方式

     思路:先将源文件内容一次性全部读入内存,然后在内存修改完毕后,覆盖写回源文件

    with open('db.txt','rt',encoding='utf-8') as read_f:
        msg=read_f.read()
        msg.replace('alex','zhouxiang')
    with open('db.txt','wt',encoding='utf-8') as write_f:
        write_f.write(msg)

    修改文件内容的第二种方式

    1.以读的方式打开原文件,以写的方式打开新文件

    2.从原文件中循环读取每一行内容修改后写入新文件

    3.删除原文件,将新文件重命名原文件的名字

    优点:同一时间只有一行内容在内存中

    import os
    with open('b.txt','rt',encoding='utf-8')as read_f,
            open('b.txt.swap','wt',encoding='utf-8')as write_f:
        for line in read_f:
            write_f.write(line.replace('alex','egon'))
    
    os.remove('b.txt') #删除老文件
    os.rename('b.txt.swap','b.txt')

    函数初体验 

    #注册功能
    uname=input('请输入用户名').strip()
    pwd=input('请输入密码').strip()
    with open('db.txt','at',encoding='utf-8') as f:
        f.write('%s,%s
    '%(uname,pwd))
        f.flush()
    #认证功能
    inp_uname=input('请输入你的账户<<:').strip()
    inp_pwd=input('请输入你的密码<<:').strip()
    with open('db.txt','rt',encoding='utf-8')as f:
        for line in f:
            info=line.strip('
    ').split(',')
            if inp_uname==info[0] and inp_pwd==info[1]:
                print('登录成功')
                break
        else:
            print('帐号和密码错误')
    
    #注册
    def register(): while True: uname=input('username>>:').strip() if uname.isalpha(): break else: print('用户名必须由字母组成傻叉') while True: pwd1=input('密码>>: ').strip() pwd2=input('重复输入密码>>: ').strip() if pwd1 == pwd2: break else: print('两次输入的密码不一致,眼瞎吗') with open('db.txt','at',encoding='utf-8') as f: f.write('%s:%s ' %(uname,pwd1)) f.flush()

    函数的基本使用

    1、什么是函数

    在程序中,函数是具备某一功能的工具

    事先将工具准备好,即函数的定义

    遇到应用场景拿来就用即函数的调用

    所以务必记住函数遵循先定义后调用的原则

    2、为何要用函数

    不用函数的问题

    1、程序冗长

    2、程序的扩展性差

    3、程序的可读性查

    3、如何用函数

    函数的使用必须遵循先定义后调用的原则

    def 函数名(参数1、参数2)  (如果需要传值那么就需要参数)

    函数的定义与调用

    函数的使用必须遵循先定义后调用原则

    没有事先定义的函数,而直接引用函数名,就相当于引用一个不存在的变量名

    定义函数的三种方式

    定义函数时的参数就是函数体接收外部传值的一种媒介,其实就一个变量名

    1、无参函数:
    在函数定义阶段括号内没有参数,称为无参函数
    注意:定义时无参,意味着调用时也无需传入参数
    应用:
    如果函数体代码逻辑不需要依赖外部传入的值,必须定义无参函数

    def func():
        print('hello world')
    func()
    

    2、有参函数
    在函数定义阶段括号内有参数,称为有参函数
    注意:定义时有参,意味着调用时也必须传入参数
    应用:
    如果函数体代码逻辑需要依赖外部传入的值,必须定义成有参函数

    def sum2(x,y):
        res=x+y
        print(res)
    sum2(10,20)
    sum2(30,40)
    

    使程序可读性更强

    def check_user():
        while True:
            uname=input('username>>:').strip()
            if uname.isalpha():
                return uname
                # break
            else:
                print('用户名必须由字母组成傻叉')
    
    def check_pwd():
        while True:
            pwd1=input('密码>>: ').strip()
            pwd2=input('重复输入密码>>: ').strip()
            if pwd1 == pwd2:
                return pwd1
            else:
                print('两次输入的密码不一致,眼瞎吗')
    
    def db_hanle(uname,pwd1):  #有参函数
        with open('db.txt','at',encoding='utf-8') as f:
            f.write('%s:%s
    ' %(uname,pwd1))
            f.flush()
    
    def register():
        # 检测用户名是否合法
        x=check_user() #x='EGON'
        # 检测密码是否合法
        y=check_pwd() #y='123'
    
        # 写入数据文件
        # db_hanle(合法的用户名,合法的密码)
        db_hanle(x,y)
    register()
    
    3、空函数
    
    def func():
        pass
    
    
    def check_user():
        pass
    
    def check_pwd():
        pass
    
    def write_db(x,y):
        pass
    
    def register():
        #1 输入用户名,并进行合法性校验
        #2 输入密码,并进行合法性校验
        #3 将合法的用户名、密码写入文件
        x=check_user()
        y=check_pwd()
    

      

  • 相关阅读:
    Android——继续深造——从安装Android Studio 2.0开始(详)
    PHP——安装wampserver丢失MSVCR110.dll
    Marza Gift for GDC 2016
    Retrieve OpenGL Context from Qt 5.5 on OSX
    Space Time Varying Color Palette
    Screen Space Depth Varying Glow based on Heat Diffusion
    Visualization of Detail Point Set by Local Algebraic Sphere Fitting
    Glass Dragon
    Jump Flood Algorithms for Centroidal Voronoi Tessellation
    京都之行
  • 原文地址:https://www.cnblogs.com/wangmiaolu/p/9155102.html
Copyright © 2011-2022 走看看