使用seek方法:其格式为seek(offset,whence),其中offset是相对偏移量的意思
whence有 三种情况:
- 0是参照文件开头,在t和b模式下都能使用1是参考文件光标位置,只能在b模式下使用(值得注意的是,参照光标的位置意义在于之前的代码以及将光标从开头移动到了其他位置,如果一开始就只用这个,只能从文件开头的内容开始移动)2是参考文件的末尾,只能在b模式下使用
上述三种模式,无论在哪种模式运行,seek移动都是以字节(bytes)的单位进行移动的。而read对于文本文件模式是以字符个数为单位读取的,对于二进制数据则还是字节为单位。
文件的修改硬盘上的数据有两个状态
占有态与自由态
我们删除数据其实就是将数据原来的位置标记成自由态
之后如果有新的数据进来了并且落到了自由态位置那么直接覆盖
# 实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
优点: 在文件修改过程中同一份数据只有一份
缺点: 会过多地占用内存
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('张一蛋', 'jason')) # 将内容在内存中修改 将修改后的内容重新读取到源文件
实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件…,
删掉原文件,将临时文件重命名原文件名
优点: 不会占用过多的内存
缺点: 在文件修改过程中同一份数据存了两份
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') # 重命名文件
函数
Python 中函数的应用非常广泛,前面章节中我们已经接触过多个函数,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。
除了可以直接使用的内置函数外,Python 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。
def 函数名(参数列表):
//实现特定功能的多行代码
[return [返回值]]
- def
是定义函数的关键字函数名
函数名类似于是变量名 指代函数体代码 命名与变量名一致括号
定义函数的时候 函数名后面肯定要先写括号参数
类似于使用函数的时候 给函数内部传递的数据 可以不写 或者单个、多个冒号
定义函数也需要有缩进的代码块函数的注释
用于解释函数的主要功能、使用方法等说明性文字函数体代码
函数的核心功能 也是我们将来编写的核心return
后面跟什么 那么执行完函数之后就会返回什么



