• 【0808 | Day 11】文件的高级应用/修改以及函数的定义/使用/参数


    文件的高级应用

    一、三种模式

    1. 'r+'模式

      with open('test.py','r',encoding = 'utf8') as fr:
          print(fr.writable())
          fr.write('x=10')
          print(fr.write())
    2. 'w+'模式

      with open('test.py','w+',encoding = 'utf8') as fr:
          print(fr.readable)
          fr.write('x=10')
          print(fr.read())
    3. 'a+'模式

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

       

    指针的应用

    一、文件的内置方法

    1. seek( offset,whence): offset代表文件指针的偏移量,单位是字节

      with open('test.txt','r',encoding = 'utf8') as fr:
          fr.seek(1) #偏移1位,默认从文件头开始
          fr.seek(0,2) #2表示从文件末开始,指针指向最末
          fr.seek(1,0) #0表示从文件头开始,偏移1位
    2. tell( ):每次统计都是从文件开头到当前指针所在位置

      with open('test.txt','r',encoding = 'utf8') as fr:
          #fr.seek(2,0)
          print(fr.tell())  #从0到2,即2
    3. read(n): 只有在模式下的read(n),n代表的是字符个数,除此之外,其他但凡涉及文件指针的都是字节个数(读取个数)

      with open('test.txt','r',encoding = 'utf8') as fr:
          print(fr.read(n))
    4. truncate(n): truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

      with open('test.txt','a',encoding = 'utf8') as fr:
          fr.truncate(2) #第二个字符后的内容清空
          
      #注意:如果内容是“中奖啦”,2个字节一个字,如果truncate(3),则'中'之后乱码   

     

    二、相关知识:覆盖

    #假设test.txt内容为:中中大大奖啦

    with open('test.txt','rt',encoding = 'utf8') as fr:
        fr.seek(6,0)
        fr.write('小小小')  #按理说应该变为“中中小小大大奖啦” 
        print(fr.read())
        
    #结果为“中中小小奖啦”

    注意:因为插入字符会占用内存,所以系统一般都是覆盖。

     

    文件修改的两种方式

    一、方式一:

    import os
    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','dsb')
        fw.write(data)
        os.remove('test.py')  #删除文件
        os.rename('test_swap.py','test.py')  #重命名文件

    二、方式二:

    import os
    with open('test.py','r',encoding='utf8') as fr,
            open('test_swap.py','w',encoding='utf8') as fw:
        for i in fr:
            i = i.replace('sb','dsb')
            fw.write(i)
        os.remove('test.py')  #删除文件
        os.rename('test_swap.py','test.py')  #重命名文件
     

    函数的定义

    一、登录&注册

    register( )注册:
    usn = input("请输入注册姓名:").strip()
    pwd = input("请输入注册密码:").strip()
    with open('user_info.txt','a',encoding='utf8') as fa:
        fa.write(f'{usn}:{pwd}
    ')
    ​
    for i in range(2):
        again_pwd = input("请再次输入密码:").strip()
        if again_pwd == pwd:
            print('恭喜你注册成功啦~')
        else:
            print("注册失败~")
            continue
        break

     

    login( )登录:
    inp_usn = input("请输入注册姓名:").strip()
    inp_pwd = input("请输入注册密码:").strip()
    with open('user_info.txt', 'r', encoding='utf8') as fr:
        data = fr.read()
        user_list = data.split("|")
        print(user_list)
        user_info = f'{inp_usn}:{inp_pwd}'
        if user_info in user_list:
            print('恭喜你啦~')
        else:
            print('登录失败~')

     

    二、函数的使用

    def 函数名(param1、param2……):  #定义阶段只检测语法
        """
        函数功能的描述信息
        :param1:描述
        :param2:描述
        :return:返回值
        """
        code 1
        code 2
        code 3
        ...
    ​
        return 返回值
    函数名()  #会显示语法错误
    函数:注册
    # 注册功能函数
    def register():
        """注册功能"""
        username = input('username: ').strip()
        pwd = input('password: ').strip()
    ​
        with open('38a.txt', 'a', encoding='utf8') as fa:
            fa.write(f"{username}:{pwd}
    ")
            fa.flush()
    ​
    ​
    register()
    # 复用
    register()
    register()
    函数:登录
    # 登录功能函数
    def login():
        """登录功能"""
        inp_username = input('username: ').strip()
        inp_pwd = input('password: ').strip()
    ​
        with open('38a.txt', 'rt', encoding='utf8') as fr:
            for user_info in fr:
                user_info = user_info.strip('
    ')
                user_info_list = user_info.split(':')
                if inp_username == user_info_list[0] and                inp_pwd == user_info_list[1]:
                    print('login successful')
                    break
            else:
                print('failed')
    ​
    ​
    login()
     

    三、函数的返回

    注意:print返回的值不可调用,而return的值可以继续调用

     

    定义函数的三种形式

    一、无参函数

    可以单独使用,无变量

    def add(x,y):
        print(int(x)+int(y))
        
    x = input('number1: ')
    y = inout('number2: ')
    add(x,y)

    二、有参函数

    不能单独使用,要加参数(配件)

    def func():
        x = input('number1: ')
        y = inout('number2: ')
        print(int(x)+int(y))
    ​
    func()

    三、空函数

    只是定义函数,什么都没有

    def func():
        pass

     

    函数的参数

    一、形参(位置形参)

    定义阶段,占个位而已

    def add(x,y):  #此处的x, y是形参

    二、实参(位置实参)

    调用阶段,具有实际意义

    def add(x,y):
        <代码块>
        
    add(x,y)  #此处的x, y是实参

    注意:位置形参和位置实参是一一对应的。

    三、关键字实参

    注意:函数的参数尽量不超过两个

    def shopping(name = 'Nick'):
        goods_dict = {1:'car',2:'house',3:'job'}
        print(f'恭喜{name},得到一个{goods_dict[3]}!')
        
    shopping()  #不输入
    shopping()  #输入'John',将会取代默认形参
    #恭喜Nick,得到一个job!
    #恭喜John,得到一个job!
    ​
    ​
    #关键字实参
    def shopping(x,name = 'Nick'):  #默认形参放后面
        goods_dict = {1:'car',2:'house',3:'job'}
        print(f'恭喜{name},得到一个{goods_dict[3]}!')
        
    shopping(name = 'Nick',x= 1)  
    shopping(1,'Nick')  

     

  • 相关阅读:
    微信支付Native扫码支付模式二之CodeIgniter集成篇
    如何使用硬盘安装debian8.3?
    使用git将代码push到osc上
    树莓派(Raspberry Pi)搭建简单的lamp服务
    win下修改mysql默认的字符集以防止乱码出现
    CodeIgniter2.2.0-在控制器里调用load失败报错的问题
    Ubuntu Server(Ubuntu 14.04 LTS 64位)安装libgdiplus2.10.9出错问题记录
    linux下mono的安装与卸载
    asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题
    使用NPOI将数据导出为word格式里的table
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11322928.html
Copyright © 2020-2023  润新知