文件操作与函数拓展版
文件操作与函数拓展版
一、文件内光标的移动控制文件内光标的移动: # with open(r'b.txt', 'rb') as f: # print(f.read(4).decode('utf8')) # print(f.tell()) # 查看光标移动了多少个字节 # f.seek(3, 1) # print(f.read().decode('utf8')) """ 控制文件内光标的移动 f.seek() f.seek(offset,whence) offset表示位移量 始终是以字节为最小单位 正数从左往右移动 负数从右往左移动 whence表示模式 0:以文件开头为参考系(支持tb两种模式) 1:只支持b模式 以当前位置为参考系 2:只支持b模式 以文件末尾为参考系 """ # 小练习:实现动态查看最新一条日志的效果 import time with open('a.txt', 'rb') as f: f.seek(0, 2) while True: line = f.readline() if len(line) == 0: # 没有内容 time.sleep(0.5) else: print(line.decode('utf-8'), end='') 二、文件内数据的修改# 方式1 覆盖 # with open(r'c.txt','r',encoding='utf8') as f: # data = f.read() # # print(type(data)) # with open(r'c.txt','w',encoding='utf8') as f1: # new_data = data.replace('tony','jason') # f1.write(new_data) # 方式2 新建 import os with open('c.txt', mode='rt', encoding='utf-8') as read_f, \ open('c.txt.swap', mode='wt', encoding='utf-8') as write_f: for line in read_f: write_f.write(line.replace('SB', 'kevin')) os.remove('c.txt') # 删除原文件 os.rename('c.txt.swap', 'c.tx t') # 重命名文件 """ 自己总结两种方式的优缺点 """ 三、函数l = [11, 22, 33, 44, 55, 66, 77, 88] print(len(l)) # 假设len无法使用 def my_len(): n = 0 for i in l: n += 1 print(n) print(my_len()) """ 1.我们现在所写的代码无法做到精简 需要用就必须重复写 模仿len的内部源码 2.我们现在所写的代码兼容性极差(无法解决) 3.我们现在所写的代码没有返回值(无法解决 使用之后的返回结果) 函数简介 函数就类似于是工具 提前定义好之后可以反复使用 """ 函数结构# 函数语法结构 """ def 函数名(参数1,参数2): '''函数注释''' 函数体代码 return 返回值 1.def(必须的) 是定义函数的关键字 2.函数名(必须的) 是函数的名字 相当于变量名 函数名的命名规范与风格遵循变量名的 3.参数1,参数2(可选的) 参数可以没有也可以有多个 表示在使用函数之前需要满足的一些条件 4.函数注释(可选的) 类似于产品说明书 主要用于介绍函数功能 参数使用 及其他情况 5.函数体代码(必须的) 函数核心的代码逻辑(重要) 6.return返回值(可选的) 使用函数之后反馈给使用者的结果 可以有也可以没有 """ 函数的定义与调用########################################################### 1.函数必须先定义后调用(顺序不能乱) 2.函数在定义阶段只检测语法不执行代码 3.函数在调用阶段才会执行函数体代码 如何调用函数 函数名加括号 如果函数在定义阶段有参数则在调用阶段也需要给参数 ########################################################### 函数在定义与调用阶段底层原理 1.在内存空间中申请一块空间存储函数体代码 2.将函数体代码所在的空间地址绑定给函数名 3.函数名加括号则会执行函数体代码 1.内置函数 python解释器自带的(提前给你定义好了 你直接使用即可) 2.自定义函数 程序员自己写的函数 2.1.无参函数 2.2.有参函数 2.3.空函数 # 无参函数:在函数定义阶段括号内没有写参数(变量名) # def my_func(): # print('这个函数很牛逼') # 有参函数:在函数定义阶段括号内写了参数(变量名) # def my_func(a,b): # print('这个函数更牛逼') # my_func(1,2) # 空函数:函数体代码为空(pass ...) """ 虽然空函数本身没有含义 但是空函数可以提前规定好编写代码的思路 """ def run(): pass def fight(): pass def talk(): pass |