Вы уверены, что ваши примеры верны? Документация модуля кодеков гласит:
Примечание. Файлы всегда открываются в двоичном режиме, даже если двоичный режим не указан. Это сделано для того, чтобы избежать потери данных из-за кодирования с использованием 8-битных значений. Это означает, что при чтении и записи не выполняется автоматическое преобразование '\ n'.
В моей системе с файлом в кодировке Latin-2 и окончанием строки DOS нет разницы между «rt», «r» и «rb» (отказ от ответственности: я использую 2.5 в Linux).
В документации для open
также не упоминается флаг "t", поэтому поведение кажется немного странным.
Символы новой строки не удаляются из строк, поскольку не все строки, возвращаемые readline
, могут заканчиваться символами новой строки. Если файл не заканчивается новой строкой, последняя строка не содержит ни одной. (Я, очевидно, не могу придумать лучшего объяснения).
Символы новой строки не отличаются в зависимости от кодировки (по крайней мере, среди тех, которые используют ASCII для 0-127), только в зависимости от платформы. Вы можете указать «U» в режиме при открытии файла, и Python обнаружит любую форму новой строки, либо Windows, Mac или Unix.