with open:将文件的释放交给with管理

with open('文件', '模式', encoding='utf-8') as f:
# 操作
pass

a模式:追加写入

# temp.txt
# 111222333

with open('temp.txt', 'a', encoding='utf-8') as f:
f.write('new msg')

# 结果:111222333new msg

文件的复制:就是先读再写

# 文本类型文件的复制
r = open('source.txt', 'r', encoding='utf-8')
w = open('target.txt', 'w', encoding='utf-8')
for line in r: # 遍历就是一行一行读 取读文件的流
w.write(line)
w.flush() # 将写入到内存中的数据刷新到硬盘中
w.close()
r.close()

# 用with open语法如何处理?
# r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
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)

# 如果复制非文本类型的数据文件?
# 从模式采用b模式,不需要关心编码问题
with open('source.mp4', 'rb') as f1:
with open('target.mp4', 'wb+') as f2: # rb+ | wb | wb+ | ab | ab+
for line in f1:
f2.write(line)

模式汇总

'''
r: 读
w: 写(无创建,有清空)
a: 追加(有创建的功能)

t: 文本操作(默认模式) r=>rt w=>wt a=>at
b: 非文本文件必须采用二进制模式来处理
+: 可读可写

r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
rb: 二进制读 | wb:创建清空文件的二进制写 | ab: 创建不清空文件(追加)的二进制写
rb+ | wb+ | ab+
'''

游标:必须在b模式下操作,seek中偏移的是字节

'''
百度网盘 - 秒传
'''
'''
1. 如何使用游标:游标的相关方法
2. 游标相关的读写操作
3. 根据游标在大文件中取出多个指定位置的部分字节内容
'''

'''
seek(偏移量, 偏移位置)
偏移位置:
0 -- 文件开头
1 -- 当前位置
2 -- 文件末尾
'''

# 游标读
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('慢慢传去吧')

转载于:https://www.cnblogs.com/zhangdajin/p/10634386.html

文件操作模式扩展、游标操作相关推荐

  1. cortex-m3 操作模式 寄存器组 异常类型 堆栈 中断

    cortex-m3 操作模式 寄存器组 异常类型 堆栈 中断 参考 操作模式 处理器的操作模式:为了区别正在执行代码的类型.复位后,处理器进入线程模式.特权级. 处理者模式(handler mode) ...

  2. android 中文件操作模式

    可以调用content.openOutputStram(filename,OPerator_model)来生产一个文件 其生成的文件操作模式有 Context.Module_private,Conte ...

  3. Android心得4.1--文件的保存与读取及文件的操作模式详解.doc

    一.保存到手机内存 1.  很多时候我们的软件需要对处理后的数据进行存储或再次访问.Android为数据存储提供了多种方式,分别有如下几种: l     文件(采用IO数据流的方式) l     Sh ...

  4. python文件操作模式是什么,python --文件操作模式详解

    #f= open(r"aaa/a.txt",mode='rt') # f的值是一种变量,占用的是应用程序的内存空间,此时牵扯的是两个方面的资源 #print(f) ##2.操作文件 ...

  5. Android学习笔记---13_文件的操作模式.各个应用之间的文件权限

    2013-03-05 13_文件的操作模式 --------------------------------------- 1.注意在应用相同的情况下,不同的项目一定不要用相同的包名这样的话,会被视为 ...

  6. 【Vim】学习笔记四 多文件编辑、可视模式、视窗操作

    文章目录 1. 多文件编辑 (1) 使用vim编辑多个文件 (2) 进入vim后打开新文件 (3) 恢复文件 2. 可视模式命令简介 3. 视窗操作 (1) 视窗操作简介 4. 创建加密文档 5. 在 ...

  7. python调用vb文件_Python小白学习之路(十九)—【文件操作步骤】【文件操作模式】...

    一.文件操作步骤 step1:打开文件,得到文件句柄并赋值给一个变量 step2:通过句柄对文件进行操作 step3:关闭文件 举例: a= open('hello world', 'r', enco ...

  8. 文件操作:读写模式、操作模式、操作方法

    文件操作 补充储备 1.with语法支持一次性打开多个文件,需要用逗号隔开eg:with open(r'a.txt','r',encoding='utf8') as f1 , open(r'b.txt ...

  9. python中对文件、文件夹(文件操作函数)的操作

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

最新文章

  1. java 实验4 异常
  2. JavaScript面向对象——多继承的实现与理解
  3. html:(33):文字排版粗体和斜体
  4. Android常用代码混淆模板
  5. 极简主义︱使用Turicreate进行快速图像分类迁移训练与预测(六)
  6. 算法整理(二)---高速排序的两种实现方式:双边扫描和单边扫描
  7. java的三种流程控制语录_Java 流程控制语句
  8. python 颜色条_python – 在Matplotlib / Cartopy中创建颜色条图例
  9. JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
  10. 中职计算机ps教案ppt,photoshop课件ppt
  11. win11 无声音,且扬声器无插座信息 解决方法
  12. 【C语言基础】-九条语句
  13. 考研英语 长难句训练day12
  14. java个十百千万位余数_1 Java第三课[流程控制]
  15. bat脚本执行sql脚本
  16. c语言表示时间的程序,C语言显示“当前时间”小程序
  17. Linux中的网络服务初步---FTP服务器、Web服务器
  18. Fortran语言的入门与心得
  19. Android项目实战:简单天气-刘桂林-专题视频课程
  20. 神舟八号安全着陆回家有感

热门文章

  1. GitStats:Git开发历史统计工具 - liyropt - 博客园
  2. django中,kindeditor存到数据库的html,前台html标签被自动转义的解决办法
  3. Scala学习(二)--- 控制结构和函数
  4. 性能相差极大的SQL语句
  5. 免费天气预报短信服务
  6. 关于web工程项目路径的一些说明
  7. 招聘:兼职ASP.NET 开发工程师
  8. 微软概述 Windows Server 2008 的定价、包装及授权
  9. 9/100. Reverse Linked List
  10. C#:对txt文件的读写