Под капотом Python 2.4 передает встроенные аргументы open
в функцию fopen
операционной системы. Python делает некоторые искажения строки режима при определенных условиях.
if (strcmp(mode, "U") == 0 || strcmp(mode, "rU") == 0)
mode = "rb";
Так что, если вы передадите верхний регистр U
или rU
, он откроет файл для двоичного чтения. Глядя на исходный код GNU libc и в соответствии со страницей MSDN, описывающей реализацию Windows fopen
, опция 'u
' игнорируется.
Наличие более одного указателя режима ('r
', 'w
' и 'a
') в строке режима не имеет никакого эффекта. Это можно увидеть, посмотрев реализацию GNU libc синтаксического анализа строки режима:
switch (*mode)
{
case 'r':
omode = O_RDONLY;
break;
case 'w':
omode = O_WRONLY;
oflags = O_CREAT|O_TRUNC;
break;
case 'a':
omode = O_WRONLY;
oflags = O_CREAT|O_APPEND;
break;
default:
__set_errno (EINVAL);
return NULL;
}
В первом символе строки режима выполняется поиск одного из 'r
', 'w
' или 'a
', если это не один из этих символов, возникает ошибка.
Поэтому, когда файл открывается как "wua
", он открывается только для записи, создается, если он не существует и усекается. «u
» и «a
» будут игнорироваться.