Я немного поковырялся. Действительно документация гласит:
buffering - необязательное целое число, используемое для установки политики буферизации. Пропуск 0, чтобы отключить буферизацию (разрешено только в двоичном режиме), 1, чтобы выбрать буферизацию строки (можно использовать только в текстовом режиме), и целое число> 1, чтобы указать размер в байтах куска буфера фиксированного размера ...
Следовательно, было бы разумно ожидать, что указание buffering=2
приведет к использованию буфера размером 2B
(и файлы будут очищены при использовании этого буфера вверх). Однако в текстовом режиме это, кажется, (и документация не совсем ясно указывает, что в этом месте) влияет на подчеркивание BufferedWriter
, но TextIOWrapper
, чей write()
, который вы в конечном итоге вызываете, по-прежнему «свое дело». .. Начиная с Python 3.7, вы говорите ему не делать этого и немедленно передаете записи в базовый объект, вызывая f.reconfigure(write_through=True)
в файле, который вы открыли.
На самом деле весь код и проверки значения write_through
уже есть в Python 3.6 (я проверял 3.6.8) (на самом деле _io_TextIOWrapper_write_impl
, то есть _io.TextIOWrapper.write
, идентичны в обеих версиях) , но атрибут write_through
не открыт (пока).