使用文本I/O时,内置open()函数的缓冲参数似乎被忽略:
文本I/O:
>>> 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$
为什么?这是故意的吗?你知道吗
我在这附近摸了一下。事实上,文件规定:
因此,可以合理地预期,指定} 将写操作立即传递给底层对象。你知道吗
buffering=2
将导致使用大小为2B
的缓冲区(并在使用该缓冲区时看到文件被刷新)。然而,在文本模式下,它似乎(文档并没有明确指出在这个地方)会影响下划线BufferedWriter
,但是TextIOWrapper
的write()
仍然是“它自己的事情”。。。从python3.7开始,您告诉它不要这样做,并让它通过对已打开的文件调用^{实际上,
write_through
的所有代码和值检查都已经在python3.6中了(我已经检查了3.6.8)(事实上,_io_TextIOWrapper_write_impl
,即_io.TextIOWrapper.write
,在两个版本中是相同的),但是write_through
属性还没有公开(还没有)。你知道吗相关问题 更多 >
编程相关推荐