Day10
今日总结
文件内光标的移动
1.read()的使用
'''
read()方法会移动光标,结束后光标会移动到文件末尾,使得重复打印read()只会返回一遍
在文本模式下,read()里的数字表字符的个数,但在b模式下,则表示字节的个数
'''
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read())
print(f.read())
print(f.read())
# Hello world
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read(1)) # H
print(f.read(1)) # e
print(f.read(1)) # l
# 在utf8中,英文用1bytes(一个字节)表示,中文用3bytes表示
# unicode中所有字符都是2bytes表示(unicode可以忽略)
2.控制光标的移动
'''
通过seek()方法控制光标的移动
seek()方法在t模式也只能通过字节单位来移动
seek(offset,whence)
offset:移动的字节数
whence:控制模式,默认是0
0:将光标先移动到文件开头,支持文本模式和二进制模式
1:将光标先停留在当前位置,只支持二进制模式
2:将光标先移动到文件末尾,只支持二进制模式
'''
with open(r'a.txt', 'rb') as f:
f.seek(1, 0)
print(f.read(1).decode()) # e
f.seek(1, 1) # 基于e的位置移动一个字节
print(f.read(1).decode()) # l
print(f.tell()) # 4 tell() 获取光标基于文件开头的字节数
文件的修改
'''
文件在硬盘上有两个状态:占有态与自由态
删除数据本质是将原数据的位置标记为自由态,之后如果有新的数据在自由态位置会直接覆盖掉
硬盘上的文件数据是不能够从中间添加内容的,只能移除老内容,重新刻新的
'''
修改方法1:
# 将文件一次性存入内存,再在内存中修改后再覆盖源文件
# 优点: 修改过程中只存一份数据
# 缺点: 过于占用内存
a.txt内数据为 Hello world一二三四五
with open('a.txt', mode='r', encoding='utf-8') as f:
data = f.read()
with open('a.txt', mode='w', encoding='utf-8') as f:
f.write(data.replace('一二三四五', '!'))
with open('a.txt', mode='r', encoding='utf-8') as f:
print(f.read()) # Hello world!
修改方法2:
# 以r模式打开原文件,再以写的方式打开临时文件,一行行读取原文件修改,再写入临时文件
# 优点: 不占用内存
# 缺点: 修改过程存了两份文件
a.txt内数据为 Hello world!
import os # 模块(后面会学)
with open('a.txt', 'r', encoding='utf-8') as read_f, \
open('.a.txt.swap', 'w', encoding='utf-8') as wrife_f:
for line in read_f:
wrife_f.write(line.replace('!', '!!!'))
os.remove('a.txt') # 删除文件
os.rename('.a.txt.swap', 'a.txt') # 重命名文件
# 修改后a.txt内容为Hello world!!!
:
函数简介
'''通过代码结束函数原理'''
l1 = [1, 2, 3, 4, 5, 4, 3, 2, 1]
d = {}
def my_count():
for i in l1:
if i not in d:
d[i] = 1
else:
d[i] += 1
print(d)
my_count() # {1: 2, 2: 2, 3: 2, 4: 2, 5: 1}
'''上述代码就可以相当于count()函数的一点功能'''
# 函数相当于工具,定义好后就可以反复使用
# 函数:在不同的地方 反复执行相同的代码
# 循环:在相同的地方 反复执行相同的代码
函数的语法结构
def 函数名(参数1,参数2):
'''注释'''
函数代码
return 返回值
def # 定义函数的关键字
参数 # 使用函数时传递的数据,可不写
注释 # 函数的使用方法以及函数的功能
return # 执行完函数返回的值
# 定义函数是不会执行函数体的代码,调用函数的格式是函数名()
进入新手村
:

浙公网安备 33010602011771号