文件光标的修改与文本数据修改,函数的语法,返回值与参数

1. 文件内光标的移动

复制代码
with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read(3))
    print(f.read(3))
# read在文本模式下 括号内的数字表示的是读取指定的字符个数

with open(r'a.txt', 'rb') as f:
    print(f.read(9).decode('utf8'))
    print(f.read(1).decode('utf8'))
    # read在二进制模式下 括号内的数字表示的是读取指定的字节数
    # unicode所有的字符都是用2bytes来起步表示
    # utf8中文用3bytes来表示 英文用1bytes来表示  往后unicode可以不做研究  只研究utf8、gbk等编码即可

# 2.控制光标的移动
with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read())
    f.seek(3, 1)  # 指定在当前位置往后移动3个字节
    print(f.read())

# with open(r'a.txt', 'rb') as f:
#     print(f.read(3).decode('utf8'))
#     # f.seek(3, 1)  # 基于当前位置 继续往后移动三个字节
#     f.seek(-3, 2)  # 基于文件末尾 往前移动三个字节
#     print(f.tell())
#     print(f.read().decode('utf8'))
"""
tell方法获取光标基于文件开头的字节数
seek方法可以控制光标的移动 在文本模式下移动的单位也是字节数
seek(参数1,参数2) 参数1是控制移动的字节数   参数2是控制模式
    参数2:0:相对于文件开头(让光标先移动到文件开头)
            支持文本模式和二进制模式
        1:相对于当前位置(让光标先停留在当前位置)
            只支持二进制模式
        2:相对于文件结尾(让光标先移动到文件末尾)
            只支持二进制模式
"""
复制代码

 

2. 文件的修改

复制代码
with open(r'b.txt', 'r+t', encoding='utf-8') as f:
f.seek(9) # 不写模式 默认是0模式 基于文件开头 并且兼容文本和二进制
f.write('111')
"""
文件数据在硬盘上其实是刻死 不可能从中间再添加新的内容
只能将老内容移除 刻新的
"""
# 有两种实现方式
# 实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
# 优点: 在文件修改过程中同一份数据只有一份
# 缺点: 会过多地占用内存
with open('b.txt', mode='r', encoding='utf-8') as f:
data = f.read()
with open('b.txt', mode='w', encoding='utf-8') as f:
f.write(data.replace('张一蛋', 'tonny'))

# 实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,
# 删掉原文件,将临时文件重命名原文件名
# 优点: 不会占用过多的内存
# 缺点: 在文件修改过程中同一份数据存了两份
import os # 模块(后面会学)

with open('b.txt', 'r', encoding='utf-8') as read_f, \
open('.b.txt.swap', 'w', encoding='utf-8') as wrife_f:
for line in read_f:
wrife_f.write(line.replace('jason', 'jerry'))
os.remove('b.txt') # 删除对应文件
os.rename('.b.txt.swap', 'b.txt') # 重命名对应文件
复制代码

 

3. 函数简介

复制代码
############函数与循环的区别##############
# 我们需要在不同的地方 反复执行相同的代码>>>:函数
# 我们需要在相同的地方 反复执行相同的代码>>>:循环
##########################################

# 函数其实就相当于是工具 提前定义好之后可以反复使用
"""
    没有函数的情况
        修理工在修理汽车的时候需要用扳手 当场架火炉 打铁 铸造出扳手 之后使用
        下次修理汽车再当场架火炉 打铁 铸造出扳手 之后使用
    有函数的情况
        修理工只需要提前准备好一个工具箱 里面提前购买好相应的工具 之后就可以反复使用
"""

len是python解释器提前给我们写好的函数(工具)
    我们只需要拿来使用即可 这种类型的函数称之为内置函数
我们自己写的函数称之为自定义函数!!!
复制代码

 

4. 函数的语法结构

复制代码
def 函数名(参数1,参数2):
    '''函数的注释'''
    函数体代码
    return 返回值

1.def    
    是定义函数的关键字
2.函数名
    函数名类似于是变量名 指代函数体代码 命名与变量名一致
3.括号
    定义函数的时候 函数名后面肯定要先写括号
4.参数
    类似于使用函数的时候 给函数内部传递的数据 可以不写 或者单个、多个
5.冒号
    定义函数也需要有缩进的代码块
6.函数的注释
    用于解释函数的主要功能、使用方法等说明性文字
7.函数体代码
    函数的核心功能 也是我们将来编写的核心
8.return
    后面跟什么 那么执行完函数之后就会返回什么
 
"""
定义函数需要使用def关键字
    定义函数的过程不会执行函数体代码 只会检测语法
        def index():
            xsadasd  定义的时候不会报错
        def index1():
            if  语法错误定义的时候就会报错
调用函数需要使用函数名加括号
"""
复制代码

 

posted @   thrombus  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示