Day 14
今日内容概要
- 文件内光标的移动
- 文件数据修改
- 函数简单介绍
今日内容详细
1.文件内光标的移动
补充知识:
1.在文本模式下read(2) 2代表读取几个字符
with open(r'a.txt','r',encoding='utf8')as f:
data = f.read(2)
print(data)
2.在二进制模式下read(3) 3代表读取几个字节
'英文1字节 中文3字节'
with open(r'a.txt','rb')as f:
data = f.read(3)#打印data会出现2进制的字节
print(data.decode('utf8'))#用utf8解码二进制字节
#当文本中都是中文,把读取的字节解码时不是3的倍数时会报错
3.tell()获取光标目前移动了的字节数#不是字符数
with open(r'a.txt','r',encoding='utf8')as f:
data = f.read(3)#当全是汉字文件时,读取3个字符
print(data)#张三说
print(f.tell())#9 因为1个汉字是3字符
#代码控制光标移动
seek(offset,whence)
offset:控制光标移动的位移量(字节)
whence:移动的模式
0 基于文件开头移动多少字节
1 基于光标当前所在位置移动多少字节
2 基于文件末尾移动多少字节
'ps:1和2只能在二进制模式下使用 0无所谓'
eg: 张三说你在讲什么
with open(r'a.txt','r',encoding='utf8')as f:
print(f.read(1))#张 打印该文本读取1个字符
f.seek(6,0)#光标移动6个字节,从文件开头开始移动
print(f.read())#说你在讲什么 打印光标后的所有文本
2.文件数据修改
"""
机械硬盘存储数据的原理:(与固态硬盘不一样,固态硬盘是算法)
1.数据的修改 其实是覆盖在原来的数据上
2.数据的删除 其实是从占有态变为自由态,数据还能恢复
"""
1.代码修改文件内容的方式:
1)覆盖写
先读取文件内容到内存,在内存中完成修改,之后w模式打开该文件写入
2)重命名
先读取文件内容到内存,在内存中完成修改,之后保存到另一个文件中,再将原文件删除并将新的文件重命名为原文件
#覆盖写
with open(r'a.txt','r',encoding='utf8')as f:
data = f.read()#将文本文件中的内容赋值给data
new_data = data.replace('张三','李四')#将文本文件中的张三替换成李四并赋值给新的变量名
with open(r'a.txt','w',encoding='utf8')as f1:
f1.write(new_data)#在f1文本文件中写入新赋值的变量名内容
"""
优点:是覆盖的模式去修改,硬盘只占用一块空间
缺点:当数据较大时会造成内存溢出
"""
#重命名
import os
with open(r'a.txt','r',encoding='utf8')as f1,open(r'aa.txt','w',encoding='utf8')as f2:
for i in f1:
f2.write(i.replace('张三', '李四'))
os.remove('a.txt') # 删除文件
os.rename('aa.txt', 'a.txt') # 重命名文件
"""
优点:不会造成内存溢出
缺点:可能临时需要占用硬盘两个地方的空间
"""
3.函数简单介绍
eg:(不使用len()完成列表数据值个数统计)
l1 = [1,2,3,4,5]
1.循环统计
count = 0
for i in l1
count += 1
print(count)
2.自定义函数
def my_len():
count = 0
for i in l1:
count += 1
print(count)
"""
1.循环结构:
在相同的位置反复执行相同的代码
2.函数:
在不同的位置反复执行相同的代码
"""
len() 内置函数
my_len() 自定义函数
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/272453.html