文件操作 (day7内容扩展)
1 文件基本操作
obj = open('路径',mode='模式',encoding='编码')
obj.write()
obj.read()
obj.close()
2 打开模式
基本模式
#打开文件
f=open('要打开文件路径',mode='r/w/a/',encoding='文件原来编码') #f为接收变量
#操作文件
data = f.() # 读取文件内部全部内容,data为接收内容
f.write('要写内容')
#关闭文件
f.close()
#文件打开新操作,自动关闭
with open('text.txt',mode= 'a',encoding='utf-8') as v:
data = a.read()
# 缩进中的代码执行完毕之后自动关闭
-
r / w / a
-
r+ / w+ / a+
-
rb / wb / ab
-
r+b / w+b / a+b
w/wb
-
w 模式传入的是字符串,写入时计算机进行了两步操作:
-
将写入内容根据指定编码encoding转换为对应二进制语言
# 字符串转化为二进制
mes = '示例'
a = mes.encode('utf-8')
#二进制文件转化为字符串
mes = '01010101010100'
a = mes.decode('utf-8') -
将二进制写入到文件里
-
一般用于文字写入
-
-
-
wd 模式传入的是二进制文件,想写入字符串需要进行转换操作
-
要把写入内容先转化为二进制语言(encode)
-
wd再将二进制文件写入文件
-
一般用于图片/音频/视频/未知编码写入
-
-
r/rb
-
r 读取时计算机进行了两步操作:
-
读取硬盘上的二进制
-
按照指定编码转换成对应文件
-
-
rb 读取到的是二进制数据,不进行任何转换.
a/ab
-
用法类比w/r
-
3 操作
-
read() , 全部读到内存
-
read(1)
-
1表示一个字符
obj = open('a.txt',mode='r',encoding='utf-8')
data = obj.read(1) # 1个字符
obj.close()
print(data) -
1表示一个字节
obj = open('a.txt',mode='rb')
data = obj.read(3) # 1个字节
obj.close()
-
-
write(字符串)
obj = open('a.txt',mode='w',encoding='utf-8')
obj.write('中午你')
obj.close() -
write(二进制)
obj = open('a.txt',mode='wb')
# obj.write('中午你'.encode('utf-8'))
v = '中午你'.encode('utf-8')
obj.write(v)
obj.close() -
seek(光标字节位置),无论模式是否带b,都是按照字节进行处理。
obj = open('a.txt',mode='r',encoding='utf-8')
obj.seek(3) # 跳转到指定字节位置
data = obj.read()
obj.close()
print(data)
obj = open('a.txt',mode='rb')
obj.seek(3) # 跳转到指定字节位置
data = obj.read()
obj.close()
print(data) -
tell(), 获取光标当前所在的字节位置
obj = open('a.txt',mode='rb')
# obj.seek(3) # 跳转到指定字节位置
obj.read()
data = obj.tell()
print(data)
obj.close() -
flush,强制将内存中的数据写入到硬盘
v = open('a.txt',mode='a',encoding='utf-8')
while True:
val = input('请输入:')
v.write(val)
v.flush()
v.close()
4 关闭文件
文艺
v = open('a.txt',mode='a',encoding='utf-8')
v.close()
二逼
with open('a.txt',mode='a',encoding='utf-8') as v:
data = v.read()
# 缩进中的代码执行完毕后,自动关闭文件
5 文件内容的修改
with open('a.txt',mode='r',encoding='utf-8') as f1:
data = f1.read()
new_data = data.replace('飞洒','666')
with open('a.txt',mode='w',encoding='utf-8') as f1:
data = f1.write(new_data)
大文件修改
-
在大文件读取时,不能一次性读取,需要按字节read(字节数)或for循环按行读取
with open('a.txt',mode='r',encoding='utf-8') as f1,open('b.txt',mode='w',encoding='utf-8') as f2: #打开文件a,b
for line in f1: #按行取a的内容
new_line = line.replace('666','999') #修改内容
f2.write(new_line) #修改后的写入b,完成修改