zoukankan      html  css  js  c++  java
  • DAY08-Python入门学习-文件与函数

    一、文件

    1.控制文件内指针的移动

    文件内指针移动,只有t模式下的read(n),n代表的字符的个数
    除此以外文件内指针的移动都是以字节为单位

    with open('a.txt',mode='rt',encoding='utf-8') as f:
        msg=f.read(1)#t模式下的read,按照字符数来移动
        print(msg)
    
    with open('a.txt',mode='rb') as f:
        msg=f.read(3)#t模式以外的的所有指针移动,按照字节数来移动
        print(msg.decode('utf-8'))


    f.seek(offset,whence)有两个参数:

      offset: 代表控制指针移动的字节数
      whence: 代表参照什么位置进行移动
      whence = 0: 参照文件开头(默认的),特殊???,可以在t和b模式下使用
      whence = 1: 参照当前所在的位置,必须在b模式下用
      whence = 2: 参照文件末尾,必须在b模式下用

    with open('a.txt',mode='rt',encoding='utf-8') as f:
        f.seek(6,0)#指针从文件开头起的第6个字节开始
        msg=f.read(1)#读取一个字符
        print(msg)
    with open('a.txt',mode='rb') as f:
        f.seek(3,0)#指针从文件开头算起的第3个字节开始
        msg=f.read(3)#读取3个字节
        print(msg.decode('utf-8'))
    with open('a.txt',mode='rb') as f:
        msg=f.read(3)#读取三个字节
        print(msg.decode('utf-8'))
        f.seek(3,1)#指针从当前位置算起,移动3个字节
        msg1=f.read(3)#读取三个字节
        print(msg1.decode('utf-8'))
    with open('a.txt',mode='rb') as f:
        f.seek(0,2)#指针移动到文件末尾
        print(f.tell())#打印为空,因为文件末尾后面没有任何内容
        f.seek(-3,2)#指针移动到以文件末尾算起,往前3个字节
        msg=f.read(3)
        print(msg.decode('utf-8'))

    2.文件修改的两种方式

    修改文件的方式一:

    1 将文件内容由硬盘全部读入内存
    2 在内存中完成修改
    3 将内存中修改后的结果覆盖写回硬盘

    with open('d.txt',mode='rt',encoding='utf-8') as f:
        all_data=f.read()
        print(all_data,type(all_data))
    
    with open('d.txt',mode='wt',encoding='utf-8') as f:
        f.write(all_data.replace('alex','dsb'))

    错误的做法

    with open('d.txt',mode='rt',encoding='utf-8') as f1,open('d.txt',mode='wt',encoding='utf-8') as f2:
        all_data=f1.read()
        f2.write(all_data.replace('dsb','alex'))

    修改文件的方式二:

    1 以读的方式打开源文件,以写的方式打开一个临时文件
    2 从源文件中每读一样内容修改完毕后写入临时文件,直到源文件读取完毕
    3 删掉源文件,将临时文件重命名为源文件名

    import os
    
    with open('d.txt',mode='rt',encoding='utf-8') as read_f,open('.d.txt.swap',mode='wt',encoding='utf-8') as write_f:
        for line in read_f:
            write_f.write(line.replace('alex','dsb'))
    
    os.remove('d.txt')
    os.rename('.d.txt.swap','d.txt')

    总结

    方式一:
    优点: 在文件修改的过程中硬盘上始终一份数据
    缺点: 占用内存过多,不适用于大文件


    方式二:
    优点: 同一时刻在内存中只存在源文件的一行内容,不会过多地占用内存
    缺点: 在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘,

    二、函数的基本使用

    1 什么是函数

    函数就是具备某一功能的工具


    2 为什么要用函数

    1 程序的组织结构不清晰,可读性差
    2 代码冗余
    3 可扩展性差

    3 如何用函数

    函数的使用必须遵循的原则:先定义,后调用
    修理工事先准备工具的过程即函数的定义
    修理工遇到应用场景拿来工具就用即函数的调用

    语法:

    def 函数名(参数1,参数2,...):
        """
        文档注释
        """
        code1
        code2
        code3
        ......
        return 返回值

    def:定义函数的关键字
    函数名: 就相当于一个变量名,指向函数的内存地址,
      注意:函数的内存地址()就可以出发函数体代码的执行

    参数: 参数是函数的调用者为函数体代码传值的媒介,在python中函数的参数无需声明类型
    """文档注释""" : 推荐写上
    代码块:就是函数体功能的具体实现
    return 返回值 :函数体代码块运行的成果


    函数的使用分为两个阶段:
    定义阶段: 只检测语法,不执行代码
    调用阶段:运行函数体代码

    #先定义
    def foo():
        print("from foo")
    
    #后调用
    print(foo)
    foo() 定义时无参,意味着调用时也无需传入参数
    
    #先定义
    def bar(x,y):
        print(x)
        print(y)
    #后调用
    bar('a',2) 定义时无参,意味着调用时也必须传入参数


    定义无参函数:当函数体的代码逻辑不依赖任何传入的值就能执行,就不需要定义参数

    def print_msg():
        print('='*50)
        print('welecome.....'.center(50,' '))
        print('='*50)
    
        print_msg()
        print_msg()

    定义有参函数:当函数体的代码逻辑依赖于外部调用者传入的值才能执行,必须定义参数用来接收外部传入的值

    def max2(x,y):
        x=1
        y=3
        if x > y:
            print(x)
        else:
            print(y)
    max2(1,4)#3,内部有下,x y,所以不需要传入参数
    
    
    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    res=max2(1,4)
    print(res)#4
  • 相关阅读:
    三种负载均衡 Nginx、Dubbo、Ribbon 区别
    Docker基础学习
    主从复制报错2061:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection
    LRU、LFU算法区别
    CAP理论原理
    Mysql安装服务到Window服务列表
    从零开始掌握 HAProxy 负载均衡器,详细!!
    一举拿下Nginx
    Nginx 负载均衡配置误区
    Linux自动化技巧
  • 原文地址:https://www.cnblogs.com/xvchengqi/p/9379488.html
Copyright © 2011-2022 走看看