Python说明文件:https : //docs.python.org/2/library/functions.html#open
open(name[, mode[, buffering]])
上面的文档说:“可选的缓冲参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲表示使用系统默认值。如果省略,则使用系统默认值。”。 当我使用
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")
输出没有变化。上面显示的每一行以相同的速度打印。 输出:
豆先生是15部25- 罗宾·德里斯科尔(Robin Driscoll)撰写并由罗恩·阿特金森(Rowan Atkinson)主演的精彩短片 标题字符。罗宾还写了不同的剧集 Driscoll和Richard Richards,以及Ben Elton的一位。的十三 从1990年1月1日起,飞行员在ITV播出 1995年10月31日,“晚安豆先生”。 豆先生”于1995年12月15日播出,还有一集“ 直到2006年才在Nickelodeon播出《伦敦豆先生》。
豆先生是15部25-
罗宾·德里斯科尔(Robin Driscoll)撰写并由罗恩·阿特金森(Rowan Atkinson)主演的精彩短片
标题字符。罗宾还写了不同的剧集
Driscoll和Richard Richards,以及Ben Elton的一位。的十三
从1990年1月1日起,飞行员在ITV播出
1995年10月31日,“晚安豆先生”。
豆先生”于1995年12月15日播出,还有一集“
直到2006年才在Nickelodeon播出《伦敦豆先生》。
那么open()函数中的buffering参数如何有用?有什么价值
最好使用哪个缓冲参数?
Enabling buffering means that you’re not directly interfacing with the OS’s representation of a file, or its file system API. Instead, a chunk of data is read from the raw OS filestream into a buffer until it is consumed, at which point more data is fetched into the buffer. In terms of the objects you get, you’ll get a BufferedIOBase object wrapping an underlying RawIOBase (which represents the raw file stream).
BufferedIOBase
RawIOBase
这有什么好处?与原始流进行良好的接口可能会导致较高的延迟,因为操作系统必须摆弄诸如硬盘之类的物理对象,并且在所有情况下这都是不可接受的。假设您想每5毫秒从文件中读取三个字母,并且文件位于硬壳旧硬盘甚至网络文件系统上。与其尝试每隔5毫秒从原始文件流中读取数据,不如将文件中的一堆字节加载到内存中的缓冲区中,然后随意使用它。
选择什么大小的缓冲区将取决于您如何使用数据。对于上面的示例,缓冲区大小为1个字符非常糟糕,三个字符是可以的,并且3个字符的较大倍数不会对用户造成明显的延迟将是理想的。