Python是个啥-第四章文件操作
第四章 文件操作
4.1 文件基本操作
obj = open('路径',mode='模式',encoding='编码')
obj.write()
obj.read()
obj.close()
4.2 打开模式
- r / w / a (只读、只写、追加)
- r+ / w+ / a+ (读写、写读、追加读【需要配合seek用】)
- rb / wb / ab (二进制【只读、只写、追加】)
- r+b / w+b / a+b (二进制 【读写、写读、追加读】)
4.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(10) # 跳转到指定字节位置 data = obj.read() obj.close() print(data) obj = open('a.txt',mode='rb') obj.seek(10) # 跳转到指定字节位置 data = obj.read() obj.close() print(data)
-
tell(), 获取光标当前所在的字节位置
obj = open('a.txt',mode='rb') # obj.seek(10) # 跳转到指定字节位置 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.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()
# 缩进中的代码执行完毕后,自动关闭文件
4.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)
超大文件修改
f1 = open('a.txt',mode='r',encoding='utf-8')
f2 = open('b.txt',mode='w',encoding='utf-8')
for line in f1:
new_line = line.replace('奈斯','耐撕')
f2.write(new_line)
f1.close()
f2.close()
with open('a.txt',mode='r',encoding='utf-8') as f1, open('c.txt',mode='w',encoding='utf-8') as f2:
for line in f1:
new_line = line.replace('奈斯','耐撕')
f2.write(new_line)