• day 8


    一、文件处理之控制文件内指针的移动

     f.seek
    # 文件内指针移动,只有t模式下的read(n),n代表的字符的个数
    # 除此以外文件内指针的移动都是以字节为单位
    # with open('a.txt',mode='rt',encoding='utf-8') as f:
    #     msg=f.read(1)
    #     print(msg)
    
    # with open('a.txt',mode='rb') as f:
    #     msg=f.read(3)
    #     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)
    #     msg=f.read(1)
    #     print(msg)
    
    # with open('a.txt',mode='rb') as f:
    #     f.seek(3,0)
    #     msg=f.read(3)
    #     print(msg.decode('utf-8'))
    
    # with open('a.txt',mode='rb') as f:
    #     msg=f.read(3)
    #     # print(msg.decode('utf-8'))
    #     print(f.tell())
    #     # f.seek(6,0)
    #     f.seek(3,1)
    #     msg1=f.read(3)
    #     print(msg1.decode('utf-8'))
    
    
    # with open('a.txt',mode='rb') as f:
    #     msg=f.read(3)
    #     # print(msg.decode('utf-8'))
    #     print(f.tell())
    #     # f.seek(6,0)
    #     f.seek(3,1)
    #     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)
    #     msg=f.read(3)
    #     print(msg.decode('utf-8'))
    
    
    
    # with open('access.log',mode='rb') as f:
    #     f.seek(0,2) # 当前位置是147bytes
    #
    #     while True:
    #         line=f.readline() # 当前位置是196bytes
    #         # print(f.tell())
    #         if len(line) == 0:
    #             # 没有新的一行内容追加进来
    #             pass
    #         else:
    #             # 有新的一行内容追加进来
    #             print(line.decode('utf-8'),end='')
    
    
    # with open('access.log',mode='rb') as f:
    #     f.seek(0,2) # 当前位置是147bytes
    #
    #     while True:
    #         line=f.readline() # 当前位置是196bytes
    #         if len(line) != 0:
    #             print(line.decode('utf-8'),end='')
    
    with open('a.txt',mode='r+t',encoding='utf-8') as f:
        f.truncate(6)

    二、文件修改的两种方式

    # 修改文件的方式一:
    # 1 将文件内容由硬盘全部读入内存
    # 2 在内存中完成修改
    # 3 将内存中修改后的结果覆盖写回硬盘
    # 优点: 在文件修改的过程中硬盘上始终一份数据
    # 缺点: 占用内存过多,不适用于大文件
    
    
    # with open('d.txt',mode='rt',encoding='utf-8') as f:
    #     all_data=f.read()
    # with open('d.txt',mode='wt',encoding='utf-8') as f:
    #     f.write(all_data.replace('alex','dsb'))
    
    
    # 修改文件的方式二:
    # 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():
                    xxx
                    print(
    '''
    # 先定义
    # 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)
    
    
    # def max2(x,y):
    #     if x > y:
    #         return x
    #     else:
    #         return y
    # res=max2(1,4)
    # print(res)
    
    
    # def foo():
    #     print('from foo')
    #     bar()
    # foo()
    
    # def bar():
    #     print('from bar')
    #
    # def foo():
    #     print('from foo')
    #     bar()
    # foo()
    
    
    # # 定义阶段
    # def foo():
    #     print('from foo')
    #     bar()
    #
    # def bar():
    #     print('from bar')
    #
    # # 调用阶段
    # foo()
    
    
    # 定义阶段
    def foo():
        print('from foo')
        bar()
    
    # 调用阶段
    foo()
    
    def bar():
        print('from bar')
  • 相关阅读:
    网站安全检测
    Centos下Subversion 服务器安装配置
    报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost
    八个免费在线网站速度测试服务-分析影响网页加载因素提高网站访问速度
    Python处理HTML转义字符
    atitit.TokenService  token服务模块的设计
    Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结
    atitit.TokenService  token服务模块的设计
    Atitit.atijson 类库的新特性设计与实现 v3 q31
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/jxl123/p/9378616.html
Copyright © 2020-2023  润新知