文件的操作
w = open('1.txt', 'w', encoding='utf--8')
w.write('000\n')
#在写入大量数据,要及时处理内存空间,不然内存可能溢出导致数据丢失
#flush:1.将内存中的数据刷新到硬盘中;2.释放文件资源
w.flush()
w.write('111\n')
# 最后一次flush()操作可省略
w.flush()
# 一次输入多行
w.writelines(['asd\n', 'aeqwead\n'])
w.close()
with open('文件', '模式', encoding='utf-8') as f:
# 操作
pass
newlines # 读取一个字节,如果是行/文件等结束标识,就返回值,否则返回None
文件的操作模式
'''
r : 读
w : 写(无创建,有清空)
a : 追加(有创建功能)
t : 文本操作(默认模式)
b : 非文本文件必须采用二进制模式
+ :可读可写
r+ : 不创建文件的可读可写 | w+:创建清空文件的可读可写 | a+"创建不清空文件(追加)的可读可写
rb : 二进制读 | wb 创建清空文件的二进制写 | ab :创建不清空文件(追加)的二进制写
rb+ | wb+ | ab+
x :创建文件,如果文件已存在就抛异常
U :已被抛弃不用
'''
# with open 语法进行文件复制(边读边写赋值)
# 复制文本类文件
with open('source.txt', 'rt', encoding='utf-8') as f1:
with open('target.txt', 'a+', encoding='utf-8') as f2:
for line in f1:
f2.write(line)
# 复制非文本类型的数据文件
# 从模式采用b模式
with open(r'source.mps','rb') as f1,\
open(r'target.mp4','wb+') as f2: # rb+/wb/wb+/ab/ab+
for line in f1:
f2.write(line)
文件游标操作
# 游标 必须在b模式下操作,seek中偏移的是字节
'''
1.如何使用游标:游标的相关方法
2.游标相关的读写操作
3.根据游标在大文件中取出多个指定位置的部分字节内容
'''
# 游标读:
# 方法: seek(偏移量,偏移位置)
# 偏移量:移动的字节数
# 偏移位置:0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移
with open('source.txt','rt',encoding='utf-8') as f:
d1 = f.read()
print(d1)
#打印游标当前位置
print(f.tell())
# 游标操作:从头开始
f.seek(0,0)
d2 = f.read()
print(d2)
# 游标操作:从当前位置开始
f.seek(3,1)
d3 = f.read()
print(d3)
# 游标操作:从末尾开始
f.seek(-5,2)
d4 = f.read()
print(d4)
# 游标写:(会覆盖书写)
with open('source.txt','rb+') as f:
f.seek(11)
f.write(b'0000') # 写入的内容必须是b字符串,会覆盖后面的内容
# 文件秒传
# 在大文件中,开头 | 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
tagdata = b''
with open(r'001.png', 'rb') as f:
data = f.read()
length = len(data)
# 开头
f.seek(10, 0)
d1 = f.read(10)
# 1/3
f.seek(length // 3, 0)
d2 = f.read(10)
# 2/3
f.seek(length // 2 * 3,0)
d3 = f.read(10)
# 末尾
f.seek(-10,2)
d4 =f.read(10)
tagdata = d1+d2+d3+d4
newdata = b''
with open(r'002.png','rb') as f:
data = f.read()
length = len(data)
f.seek(0,0)
newdata += f.read(10)
f.seek(length//3,0)
newdata += f.read(10)
f.seek(length//3*2)
newdata += f.read(10)
f.seek(-10,2)
newdata +=f.read(10)
if newdata == tagdata:
print('秒传成功')
else:
print('慢慢传去吧!')