Python:https://docs.python.org/2/library/functions.html#open
open(name[, mode[, buffering]]) 上述文档指出:“可选缓冲参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值意味着使用(大约)该大小的缓冲区(以字节为单位)。负缓冲意味着使用省略的系统default.If,使用系统默认值。”
当我用
filedata = open(file.txt,"r",0) 或
filedata = open(file.txt,"r",1) 或
filedata = open(file.txt,"r",2)或
filedata = open(file.txt,"r",-1) 或
filedata = open(file.txt,"r")输出没有变化。上面显示的每一行都以相同的速度打印。
产出:
“比恩先生”是一部英国电视连续剧,由1525- 罗宾·德里斯科尔( Robin Driscoll )编剧,罗文·阿特金森( Rowan Atkinson )饰演 标题人物。罗宾也写了不同的剧集。 德里斯科尔和理查德·柯蒂斯,还有本·埃尔顿写的。十三个 从1990年1月1日起,在ITV上播出了几集,直到 “Bean先生晚安”,1995年10月31日。一个剪辑节目,“最棒的片段 “比恩先生”,1995年12月15日播出,还有一集,“头发 “伦敦的比恩先生”直到2006年才在Nickelodeon上播出。
那么,open()函数中的缓冲参数是如何有用的?什么价值
最好用那个缓冲参数吗?
发布于 2015-04-18 03:37:48
启用缓冲意味着您不能直接与OS的文件表示或其文件系统API进行接口。相反,会将一块数据从原始OS文件中读取到缓冲区中,直到该数据被消耗为止,此时会将更多的数据提取到缓冲区中。就所获得的对象而言,您将得到一个BufferedIOBase对象,包装一个底层的RawIOBase (它表示原始文件流)。
这有什么好处呢?与原始流进行良好的接口可能会有很高的延迟,因为操作系统必须与硬盘这样的物理对象混在一起,这在所有情况下都可能是不可接受的。假设您希望每5ms从一个文件中读取三个字母,并且您的文件位于一个破旧的硬盘上,甚至是一个网络文件系统上。与其每隔5ms尝试从原始文件读取一次,不如将一堆字节从文件加载到内存中的缓冲区中,然后随意使用它。
您选择的缓冲区大小将取决于您使用数据的方式。对于上面的例子,1字符的缓冲区大小将是可怕的,3个字符将是可以的,任何大倍数的3个字符不会对您的用户造成明显的延迟将是理想的。
发布于 2016-12-21 09:56:23
发布于 2022-03-13 02:09:53
从实际角度来看,可能重要的是缓冲参数确定您要发送到流的数据何时实际保存到磁盘。
当您打开一个没有缓冲参数的文件,并向它写入一些内容时,您将看到只有在with open(...) as foo:块退出之后(或者当文件的close()方法被调用时),或者当达到某个系统确定的默认缓冲区大小时,数据才会被写入。但是,如果您设置了buffering参数,那么一旦达到缓冲区的大小,它就会写入数据。
因此,当您有一个长期运行的应用程序时,使用例如open('file.txt', 'w', buffering=1)是一件很有用的事情,并且您要将一些数据发送到一个文件中,并且希望它在每一行之后保存,而不仅仅是在应用程序退出之后。否则,崩溃或停电等会导致数据丢失。
https://stackoverflow.com/questions/29712445
复制相似问题