标签:覆盖 replace 缺点 rem enc 返回 内存 打开文件 data
文件的上下文管理
with open(....)as f:
文件读写模式(常用r、w模式)rwa:称纯净模式
r 只读模式
1.文件不存在,报错
2.文件存在,光标在文件开头(什么都没开始读)
w 只写模式
1.文件不存在 自动创建新文件
2.文件存在 先清空文件内容在执行写入
a 只追加模式(只能在文件的末尾添加内容)
1.文件不存在,自动创建新文件
2.文件存在,光标直接在文件末尾
文件操作单位
t 文本模式(只读文本的文件)
只能和r\w\a连用 ,并且不写的情况,默认是t
b 原生的二进制
1.只能和r\w\a连用
2.该模式通常用来处理非文本文件
3.直接存储网络上传输过来的二进制数据
r 只读
r+ 读写,不创建
w 新建只写
w+ 新建读写
区别:
r+与w+ :r+读写,若文件不存在,报错
w+可读可写,若文件不存在,创建
# r+ 读写模式
# with open(r'test', mode='r+', encoding='utf-8')as f: # 后面参数不写,默认rt模式
# print(f.readable()) # 可读
# print(f.writable()) # 可写
#
# # print(f.readline()) # 读一行
# print(f.read()) # 读全部
# # f.write('hahhas') # 末尾添加
# r+b 读写,并转换成二进制模式
with open(r'test', mode='r+b')as f: # 后面参数不写,默认rt模式
print(f.readable()) # 可读
print(f.writable()) # 可写
# print(f.read())
res = f.read()
# print(res)
# 1.二进制转换utf-8
# print(res.decode('utf-8'))
# 2.解码
res1 = str(res, encoding='utf-8')
print(res1)
修改文件:
1.将数据由硬盘读到内存(读文件)
2.在内存中完成修改(字符串的替换)
3.再覆盖原来的内容(写文件)
优点:硬盘上只有一个文件
缺点:当文件过大的情况下,可能会造成内存溢出
replace 替换
with open(r'test02', 'r', encoding='utf-8') as f:
res = f.read()
print(res)with open(r'test02', 'w', encoding='utf-8')as f:
data = res.replace('jeff', 'gyy') # 替换
print(data)
f.write(data)
import os
1.创建一个新文件
2.读取老文件内容到内存进行修改 将修改好的内容写到新文件当中
3.将老文件删除 将新文件的名字改成老文件
优点:内存中始终只有一行内容,不占内存
缺点:在某一时刻硬盘上会同时存在两个文件
with open(r'test02', 'r', encoding='utf-8') as read_f, open(r'test02.swap', 'a', encoding='utf-8') as write_f:
for line in read_f:
new_line = line.replace('gyy', 'cjm')
write_f.write(new_line)
os.remove(r'test02') # 删除老文件
os.rename(r'test02.swap', 'test02') # 新文件改名为老文件名字
encode 编码
decode 解码
乱码原则:用什么编码就用什么解码
a = "嘉"
# 第一种编码,解码
res = a.encode('utf-8') # 编码
print(res.decode('utf-8')) # 解码
# 第二种编码,解码
res1 = bytes(a, encoding='utf-8') # 编码二进制
print(res1, type(res1)) # 显示编码结果
# print(res1.decode('utf-8')) # 解码,并显示
res2 = str(res1, encoding='utf-8') # 解码二进制
print(res2, type(res2))
# 其他进制转10进制
dd = int('1100', 2)
print(dd)
# 10进制转2进制
aa = bin(666)
print(aa)
# 10进制转8进制
bb = oct(666)
print(bb)
# 10进制转16进制
cc = hex(666)
print(cc)
一: read(3):
二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
注意:
f.seek(offset,whence)
offset 相对偏移量,光标移动的位数
whence:
0:参照文件的开头
1:参照光标所在当前位置 只能在b模式下使用
2:参照文件的末尾 只能在b模式下使用
import time
with open('test.txt','rb') as f:
f.seek(0,2) # 光标移动
while True:
line=f.readline()
if line:
print(line.decode('utf-8'))
else:
time.sleep(0.2)
truncate() 方法用于截断文件并返回截断的字节长度。
指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。
fileObject.truncate([size])
标签:覆盖 replace 缺点 rem enc 返回 内存 打开文件 data
原文地址:https://www.cnblogs.com/guyouyin123/p/11373698.html