Python 3+ и окончания строк в файлах

17 Feb 2015

Столкнулся одного теста, который был перенесен с python 2+ на python 3+.

Тест делал следующее:

скачивал файл через python.requests и сравнивал его с эталонным содержимым на диске (посимвольно).

Выглядело приблизительно так

import requests  
import sys  
response = requests.get(sys.argv[1])  
if response.code == 200:  
 with open(sys.argv[2]) as f:  
 from\_storage = f.read()  
 from\_web = response.text  
 assert from\_web == from\_storage

Да. Все верно. Этот тест не проходил.

И тут была замечена одна странность: файл на диске содержал последовательность crlf, а в coдержимом from_storage этой последовательности не оказало.

А дело все в том, что в python 3+ было введено соглашение на обработку символов перевода строки. И управление работой осуществляется манипулированием параметром newline.

В итоге достаточно было указать newline=’’ как CRLF появились.