文件操作与函数拓展版

文件操作与函数拓展版

  · 文件内光标的移动

  · 文件内数据的修改

  · 函数

  一、文件内光标的移动

控制文件内光标的移动:

# 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
posted @ 2021-11-12 20:22  Roseblacko  阅读(22)  评论(0编辑  收藏  举报