open()的缓冲参数在处理文本I时似乎被忽略/

2024-03-29 07:37:45 发布

您现在位置:Python中文网/ 问答频道 /正文

使用文本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$

为什么?这是故意的吗?你知道吗


Tags: 函数text文本echotxt参数openmyfile
1条回答
网友
1楼 · 发布于 2024-03-29 07:37:45

我在这附近摸了一下。事实上,文件规定:

buffering is an optional integer used to set the buffering policy. Pass 0 to switch buffering off (only allowed in binary mode), 1 to select line buffering (only usable in text mode), and an integer > 1 to indicate the size in bytes of a fixed-size chunk buffer...

因此,可以合理地预期,指定buffering=2将导致使用大小为2B的缓冲区(并在使用该缓冲区时看到文件被刷新)。然而,在文本模式下,它似乎(文档并没有明确指出在这个地方)会影响下划线BufferedWriter,但是TextIOWrapperwrite()仍然是“它自己的事情”。。。从python3.7开始,您告诉它不要这样做,并让它通过对已打开的文件调用^{}将写操作立即传递给底层对象。你知道吗


实际上,write_through的所有代码和值检查都已经在python3.6中了(我已经检查了3.6.8)(事实上,_io_TextIOWrapper_write_impl,即_io.TextIOWrapper.write,在两个版本中是相同的),但是write_through属性还没有公开(还没有)。你知道吗

相关问题 更多 >