zoukankan      html  css  js  c++  java
  • Python学习笔记之 缓冲区

    缓冲

    系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存缓冲区,再由缓冲区送到磁盘中去。从磁盘中读数据,则一次从磁盘文件将一批数据读入到内存缓冲区中,然后再从缓冲区将数据送到程序的数据区。

    刷新缓冲区条件

    1.缓冲区被写满

    2.程序执行结束或者文件对象被关闭。

    3.行缓冲遇到换行

    4.程序中调用flush()函数

    实例:

    import sys
    from time import sleep
    
    def printStar(n):
        for i in range(n):
            print('*',end=' ')
            sys.stdout.flush()
            sleep(0.5)
    
    if __name__ == '__main__':
        printStar(5)
    

    在如上实例中,如果将sys.stdout.flush()注释掉,
    则5颗星会一起打印,否则会一个一个打印

    另一个例子:

    f = open('C:/Users/Administrator/Desktop/1.txt','w')
    
    while True:
        data = input('>>')
        if not data:
            break
        f.write(data)
    
    f.close()
    

    当终端打印>>时输入Hello world回车,此时打开1.txt会发现里面并没有内容,说明此时Hello world还在缓冲区中,再输入一个回车,程序执行结束,此时可以看到1.txt里出现了Hello world。

    更改代码如下:

    f = open('C:/Users/Administrator/Desktop/1.txt','w',1) # 行缓冲,换行刷新文件缓冲区
    
    while True:
        data = input('>>')
        if not data:
            break
        f.write(data + '
    ')
    
    f.close()
    

    此时每输入一个字符串都会保存进文件里

    另一种方法:

    f = open('C:/Users/Administrator/Desktop/1.txt','w')
    
    while True:
        data = input('>>')
        if not data:
            break
        f.write(data + '
    ')
        f.flush() # 人为刷新文件缓冲区
    
    f.close()
    

    此时效果和上面一样

  • 相关阅读:
    [bzoj1731] [Usaco2005 dec]Layout 排队布局
    [bzoj1914] [Usaco2010 OPen]Triangle Counting 数三角形
    [bzoj1774] [Usaco2009 Dec]Toll 过路费
    [bzoj1783] [Usaco2010 Jan]Taking Turns
    [bzoj1705] [Usaco2007 Nov]Telephone Wire 架设电话线
    [bzoj1700]: [Usaco2007 Jan]Problem Solving 解题
    定时启动任务
    数据库表转javaBean
    验证码的生成
    MD5加密与验证
  • 原文地址:https://www.cnblogs.com/zhujiangyu/p/13485477.html
Copyright © 2011-2022 走看看