标签:处理 mp4 event div decode 路径 png 操作系统 开始
计算机文件:硬盘中一块储存空间(虚拟的文件)
文件操作:根据文件名来操作硬盘的那块存储空间,操作方式为 读read,写write
文件的模式:
r: 读 w: 写(无创建,有清空) a: 追加(有创建的功能) t: 文本操作(默认模式) r=>rt w=>wt a=>at b: 非文本文件必须采用二进制模式来处理 +: 可读可写 r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
使用文件的三大步骤:
1,打开文件
2,操作文件
3,关闭文件(*****)
1、打开文件
变量名 = 文件空间
文件路径 操作模式(读|写) 编码
f = open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘)
2、操作文件
data = f.read(3) # 将所有内容读取出来,如果设置读取长度,按照规定长度读取数据
print(data)
读取文件的方法(r):
一次读取一行 line = f.readline() print(line) line = f.readline() print(line) 按行一次性全部读出 lines = f.readlines() print(lines) 逐步一行一行读取 l = [] for line in f: print(line) l.append(line) print(l) s = set() for line in f: # print(line) s.add(line) print(s)
3、关闭文件
f.close() # 释放操作系统对文件的持有,变量f还被应用程序持有
基础写(w)
文件不存在:会新建文件,再操作文件
文件存在:先清空文件,再操作文件
w = open(‘b.txt‘, ‘w‘, encoding=‘utf-8‘)
w.write(‘456‘)
w.close()
w.flush()把内存文件刷入硬盘 #在写入大量数据,要及时处理内存空间不然内存可能溢出导致数据丢失
w.close() #1;把内存的数据刷新到硬盘中 2;释放文件资源
完成文本复制
r = open(‘1.txt‘, ‘r‘, encoding=‘utf-8‘) w = open(‘11.txt‘, ‘w‘, encoding=‘utf-8‘) for line in r: # 遍历就是一行一行读 取读文件的流 w.write(line) w.flush() w.close() r.close()
借助读写,完成追加
with open(‘1.txt‘, ‘rt‘, encoding=‘utf-8‘) as f1: data = f1.read() data += ‘666‘ with open(‘1.txt‘, ‘wt‘, encoding=‘utf-8‘) as f2: f2.write(data)
模式a:
a为写模式,在原数据后追加写入新数据
with open(‘1.txt‘, ‘a‘, encoding=‘utf-8‘) as f:
f.write(‘777‘)
with 打开文件:
with open(‘1.txt‘, ‘rt‘, encoding=‘utf-8‘) as f:
f.read()
whith 完成文本复制
先读后写
with open(‘source.txt‘, ‘r‘, encoding=‘utf-8‘) as f1, open(‘target.txt‘, ‘a‘, encoding=‘utf-8‘) as f2: # 读取一个字节,如果是行/文件等结束标识,就返回该标识,否则返回None print(f1.newlines) first_data = f1.read(9) f2.write(first_data) f2.flush() print(f1.newlines) second_data = f1.readline() f2.write(second_data) f2.flush() last_data = f1.read() f2.write(last_data) f2.flush() print(f1.newlines) data = f1.read() print(data)
边读边写赋值
with open(‘source.txt‘, ‘r‘, encoding=‘utf-8‘) as f1: with open(‘target.txt‘, ‘a+‘, encoding=‘utf-8‘) as f2: for line in f1: f2.write(line)
非文本文件复制
with open(‘333.mp4‘, ‘rb‘) as f1: with open(‘666.mp4‘, ‘wb+‘) as f2: for line in f1: f2.write(line)
x:写模式,创建文件,如果文件以存在,就抛异常
with open(‘000.txt‘, ‘x‘, encoding=‘utf-8‘) as f:
pass
方法:seek(偏移量, 偏移位置)
偏移量:移动的字节数,负数是结合模式1,2往前偏移
偏移位置:
-- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移
b‘你好1234567890‘
# 游标读
with open(‘source.txt‘, ‘rb‘) as f:
d1 = f.read(11)
print(d1)
# print(d1.decode(‘utf-8‘))
# 当前游标的位置
print(f.tell())
# 游标操作 - 从末尾位置开始
f.seek(-3, 2)
d2 = f.read()
print(d2.decode(‘utf-8‘)) # 890
# # 游标操作 - 从当前位置开始
# f.seek(-3, 1)
# d2 = f.read()
# print(d2.decode(‘utf-8‘)) # 34567890
# # 游标操作 - 从头开始
# f.seek(3, 0)
# d2 = f.read()
# # print(d2)
# print(d2.decode(‘utf-8‘)) # 好1234567890
# 游标写:会覆盖书写
with open(‘source.txt‘, ‘rb+‘) as f:
f.seek(11)
# print(f.read())
f.write(b‘000‘)
print("-------------------------------------")
# 案例
with open(‘001.png‘, ‘rb‘) as f:
data = f.read()
print(len(data))
# 在大文件中,开头| 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
# 形成秒传规则
tagData = b‘‘
with open(‘001.png‘, ‘rb‘) as f:
# 通过其他途径(sys模块)来获取文件总大小
data = f.read()
length = len(data)
# 开头
f.seek(0, 0)
d1 = f.read(10)
# 1/3
f.seek(length // 3, 0)
d2 = f.read(10)
# 2/3
f.seek(length // 3 * 2, 0)
d3 = f.read(10)
# 末尾
f.seek(-10, 2)
d4 = f.read(10)
tagData = d1 + d2 + d3 + d4
# 秒传依据
print(tagData)
newData = b""
with open(‘001.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, 0)
newData += f.read(10)
f.seek(-10, 2)
newData += f.read(10)
if newData == tagData:
print(‘秒传成功‘)
else:
print(‘慢慢传去吧‘)
标签:处理 mp4 event div decode 路径 png 操作系统 开始
原文地址:https://www.cnblogs.com/wangtenghui/p/10609719.html