Python with 工作原理、装饰器、回收机制、内存管理机制、拷贝、作用域等( 五 )


这个方法的作用是把缓冲区的数据强行输出 。如果你不flush就可能会没有真正输出 。
import timewith open(r"helloworld.txt", 'at', encoding="utf-8") as f:f.write("唤醒手腕")f.flush()print("等待缓冲区压入内存...")time.sleep(5)print("写入成功")
close():关闭流对象 , 但是先刷新一次缓冲区 , 关闭之后 , 流对象不可以继续再使用了 。
flush():仅仅是刷新缓冲区 , 流对象还可以继续使用
seek指针移动的方法介绍
seek(0,0) 默认移动到文件开头或简写成seek(0)seek(x,1) 表示从当前指针位置向后移x(正数)个字节 , 如果x是负数 , 则是当前位置向前移动x个字节seek(x,2) 表示从文件末尾向前后移x(正数)个字节 , 如果x负数 , 则是从末尾向前移动x个字节
文件的修改操作
**import oswith open("helloworld.txt", 'rt', encoding='utf-8') as f, \open("helloworld.txt.swap", 'wt', encoding='utf-8') as temp_f:for line in f:line = line.replace("喜欢", "超爱")temp_f.write(line)os.remove("helloworld.txt")os.rename("helloworld.txt.swap", "helloworld.txt")**
:缓冲区
博客地址:open操作+缓冲区+上下文管理+和
-1 表示使用缺省大小的 。如果是二进制模式 , 使用io.值默认是4096或者8192 。
import io print(io.DEFAULT_BUFFER_SIZE)>>>8192
如果是文本模式 , 如果是终端设备 , 是行缓存方式 , 如果不是 , 则使用二进制模式的策略 。
0  , 只在二进制模式使用 , 表示关
1  , 只在文本模式使用 , 表示使用行缓冲 。意思就是见到换行符就flush , 按一个行进行缓冲 , 如果一行的缓冲内存被占满时,就会写入到磁盘,或者有换行符就会进行缓冲
用途:用户输入换行符后 , 将这一批数据存入磁盘
大于1 ,  用于指定的大小,# 对于文本模式,是无效的,仅针对二进制
f= open('test02','rb+',buffering=0)# 关闭缓冲区,有一个数据立即写入,不建议使用f= open('test02','rb+',buffering=1)# 是行缓冲,在缓存未被沾满时不写入,直到检测到换行符# 如果这一批写入的数据中存在换行符,那么这一批数据都写进磁盘f.flush # 手动写入磁盘
总结 :
缓冲区就是内存里的一块区域 , 把数据先存内存里 , 然后一次性写入 , 类似于数据库的批量操作 , 这样大大提高高了数据的读写速率 。
现在的外设控制器都有自己的缓冲池 , 如磁盘和网卡 , 通过缓冲IO的方式读取时 , 如里就有个buf块 , CPU可把外设里的缓冲池的字节块整块读入该buf内存 。
04、json序列化介绍
dump 和 dumps 都实现了序列化 , load 和 loads 都实现反序列化
变量从内存中变成可存储或传输的过程称之为序列化 , 序列化是将对象状态转化为可保存或可传输格式的过程 。
变量内容从序列化的对象重新读到内存里称之为反序列化 , 反序列化是流转换为对象 。
load 和 loads (反序列化)
load:针对文件句柄 , 将json格式的字符转换为dict , 从文件中读取(将转换为 dict )
data_json = json.load(open('demo.json','r'))