【发布时间】:2019-01-16 22:59:16
【问题描述】:
在处理文本 I/O 时,内置 open() 函数的缓冲参数似乎被忽略了:
文本输入/输出:
>>> f = open("myfile_text.txt", "w",buffering=2)
>>> f.write('1')
1
>>> f.write('1')
1
>>> f.write('1')
1
mymachine:~ myuser$ cat myfile.txt ; echo
mymachine:~ myuser$
二进制 I/O:
>>> f = open("myfile_binary.txt", "wb",buffering=2)
>>> f.write('1'.encode())
1
>>> f.write('1'.encode())
1
>>> f.write('1'.encode())
1
mymachine:~ myuser$ cat myfile.txt ; echo
11
mymachine:~ myuser$
为什么?这是预期的行为吗?
【问题讨论】:
-
@AlexanderStrakhov 该链接指向 python 2.7,但这个问题被标记为 python 3。
-
@JohnGordon 这应该是什么意思?来自文档:“缓冲是用于设置缓冲策略的可选整数。传递 0 以关闭缓冲(仅在二进制模式下允许),1 以选择行缓冲(仅在文本模式下可用),整数 > 1 到指示固定大小的块缓冲区的大小(以字节为单位)。"
-
@SimónRamírezAmaya 前面评论中链接的答案引用了 2.7 文档,它说它是一个近似大小。 3.6的文档不同,没有说大概的。
-
我很抱歉;我误读了文档。我将删除我之前的评论。
标签: python python-3.x io buffer