一、读写模式的结合

w:写指没有新建文件,有文件就清空

w=open('1.txt','w',encoding='utf-8')
w.write('000\n')
在写入数据时,需要及时处理内存空间,不然内存溢出到值数据丢失
w.flush()
w.write('222\n')
最后一次flush()刷新操作可以省略
w.flush()
w.close()
1、将内存的数据刷新到硬盘中  
2、释放文件资源
可以一次性写多行 \n:指换行
w.writelines(['1111\n','33333\n']) 需求:
1、完成文本文件类型的文件复制:1.txt》》》11.txt

r=open('1.txt','r',encoding='utf-8')
w=open('11.txt','r',encoding='utf-8')
for line in r:
w.write(line)
w.flush()
w.close()
r.close()

2、将文件的关闭交给with管理,当with逻辑结束后,系统会自动释放文件
with open('1.txt','r',encoding='utf-8') as r,open('11.txt','w',encoding='utf-8')as w:
for line in r :
w.write(line)
w.flush()
# w.close() r.close()系统(with open)自动运行完成,自动忽略

二、文件操作模式

r=读
w=写,无创建有清空
a=追加 有创建无清空
t=文本操作(默认模式)》》at wt rt
+=可读可写 r+:不会创建文件的可读可写 w+:创建文件/清空的可读可写 a+:创建文件不清空文件的可读可写
b=非文本文件必须采用二进制的模式处理
rb: 二进制读 | wb:创建清空文件的二进制写 | ab: 创建不清空文件(追加)的二进制写
rb+ | wb+ | ab+
x=创建文件,如果文件已存在就抛异常,属于写模式
with open('1.txt','wt',encoding= 'utf-8') as f:
f.write('')
借助读写,完成追加
方法一(复杂版)
with open('1.txt','rt',encoding= 'utf-8') as f1:
data=f1.read()
data+=''
with open('1.txt','wt',encoding= 'utf-8') as f2:
f2.write(data)
方法二(简单版)
with open('1.txt','rt',encoding= 'utf-8') as f:
f.write('')

x:写模式,创建文件,如果文件以存在,就抛异常
with open('000.txt', 'x', encoding='utf-8') as f:
pass
 

三、with完成文本文件复制

文件的复制:就是先读后写
1、文本类型文件的复制
先读后写
with open('source.txt', 'r', encoding='utf-8') as f1, \
open('target.txt', 'a', encoding='utf-8') as f2:
'''
读取一个字节,如果是行/文件等结束标识,就返回该标识,否则返回None
'''
print(f1.newlines) # 》》》》添加是返回值none 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)

2、用with open语法如何处理?
边读边写
with open('source.txt', 'r', encoding='utf-8') as f1:
with open('target.txt', 'r', encoding='utf-8') as f2:
for line in f1:
f2.write(line)

3、如果复制非文本类型的数据文件?
with open('333.mp4', 'rb') as f1:
with open('666.mp4', 'wb+') as f2:
for line in f1:
f2.write(line)

四、游标操作

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

如  百度网盘——秒传
1、如何使用游标,游标的相关方法
方法:seek
偏移量:移动的字节数,负数是结合1,2位置往前偏移
偏移位置:0:代表游标移至文件/数据的开头
                1代表:当前游标的位置开始偏移
                2:代表:从文件末尾开始偏移
2、游标相关的读写操作
b'你好1234567890'
# 游标读
with open('source.txt','rt',encoding='utf-8')as f:
d1=f.read()
print(d1)
f.seek(0,0) # 游标操作——从头开始
d2=f.read()
print(d2) # 游标读
with open('source.txt', 'rb') as f:
d1 = f.read()
print(d1)
# print(d1.decode('utf-8'))# 》》》解码的过程,不加则输出为二进制的数据 当前游标的位置
print(f.tell()) 游标操作 - 从末尾位置开始
f.seek(-3, 2)
d2 = f.read()
print(d2.decode('utf-8')) # 游标操作 - 从当前位置开始
f.seek(-3, 1)
d2 = f.read()
print(d2.decode('utf-8')) # 游标操作 - 从头开始
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'')

案例
with open('001.png', 'rb') as f:
data = f.read()
print(len(data))
3、根据游标在大文件中取出多个指定位置的部分字节内容
在大文件中,开头| 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('慢慢传去吧')
												

pytthon—day8 读写模式的结合、文件操作模式、with完成文本文件复制、游标操作的更多相关文章

  1. 关于open函数文件打开模式的有意思的一个现象

    老猿前阵子学习了文件IO,最近正在回顾及进行各种验证和总结,老猿在对文件进行打开后的返回值检查属性时,发现文件打开返回的文件对象的读写模式与打开文件的模式并不完全相同,如下案例: fp1 = open ...

  2. C++文件操作(输入输出、格式控制、文件打开模式、测试流状态、二进制读写)

    1.向文件写数据 头文件#include <ofstream> ①Create an instance of ofstream(创建ofstream实例) ②Open the file w ...

  3. day8 八、文件操作模式、文件的复制与文件游标操作

    一.文件操作 1.wr模式结合 ① w = open('1.txt', 'w', encoding='utf-8') # w:没有文件新建文件,有文件就清空文件 w.write('000\n') w. ...

  4. 文件操作 模式r+与w+

    r+与w+ r+是读写模式,在文件的末尾进行追加操作. >>> myfile=open('pwd.txt', ... 'r+') >>> myfile.read() ...

  5. python之文件的读写和文件目录以及文件夹的操作实现代码

    这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...

  6. Android开发4——文件操作模式

    一.基本概念 // 上下文对象private Context context; public FileService(Context context){ super(); this.context = ...

  7. python文件操作:文件处理与操作模式

    一,文件处理的模式基本概念 #coding:utf-8 # 一: 文件处理的三个步骤 # 1. 打开文件拿到文件对象(文件对象====>操作系统打开文件====>硬盘) # f=open( ...

  8. python文件对象几种操作模式区别——文件操作方法详解

    文件对象的字节模式/b模式(以utf-8编码为例) 读操作 写操作 指针操作 ASCII字节 返回bytes/字节类型的Ascii 写入bytes类型字节 例如:b'This is ascii' 使用 ...

  9. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作

    复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...

随机推荐

  1. java思维导图

    https://www.edrawsoft.cn/viewer/public/s/eeca7704686971

  2. 原生js触碰到底部触发函数;

    /** function __morebook(){ console.log(123) } ScrollBottom(function(){__morebook();}); **/ //如果直接写一个 ...

  3. pygame学习之打印文本

    import pygame from pygame.locals import * white = 255, 255, 255 blue = 0, 0, 200 pygame.init() scree ...

  4. ubuntu制作离线包

    一.应用场景a.当我们需要在多台电脑安装同一个软件,并且这个软件很大,下载需要很长时间b.需要安装软件的ubuntu不能上网二.离线安装包的制作2.1.通过如下指令下载XXXX软件所需要的deb包,首 ...

  5. Map接口下的集合和泛型理解

    一.Map接口 1. Map接口就是最顶层了,上面没有继承了.Map是一个容器接口,它与前面学的List.Set容器不同的是前面学的这些容器,一次只能传入一个元素,但是Map容器一次可以传入一对元素( ...

  6. BZOJ.5467.[PKUWC2018]Slay the Spire(DP)

    LOJ BZOJ 洛谷 哪张能力牌能乘攻击啊,太nb了叭 显然如果有能力牌,那么应该选最大的尽可能的打出\(k-1\)张. 然后下面说的期望都是乘总方案数后的,即所有情况的和.然后\(w_i\)统一用 ...

  7. 多项式与三角函数求导——BUAA OO 第一单元作业总结

    第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...

  8. 关于JQ中,新生成的节点on绑定事件失效的解决

    老旧的JQ库在做新生成DIV的click事件绑定,需要先绑定其现有的父元素,在追踪到需要事件绑定的子节点上 如以下这段代码$(".t_in").on("click&quo ...

  9. Linux 下redis 集群搭建练习

    Redis集群 学习参考:https://blog.csdn.net/jeffleo/article/details/54848428https://my.oschina.net/iyinghui/b ...

  10. 读 Spring实战 遇到的问题记录(一)

    package soundsystem; import beanConfig.CDPlayerConfig; import org.junit.Rule; import org.junit.Test; ...