2016-04-27 7 views
4

Я работаю под ubuntu на скрипте python3.4, где я беру в параметр файл (закодированный в UTF-8), созданный под Windows. Мне нужно пройти через строку строки за строкой (разделенной \r\n), зная, что в «строках» содержится '\n', которые я хочу сохранить.отключить автоматическое изменение с r n на n в python

Моя проблема заключается в том, что Python преобразует файл "\r\n" в "\n" при открытии. Я пытался открыть различные режимы ("r", "rt", "rU").

Единственное, что я нашел, это работать в двоичном режиме, а не в текстовом режиме, открываясь с помощью режима "rb".

Есть ли способ сделать это, не работая в двоичном режиме или в правильном порядке?

EDIT: Решение:

with open(filename, "r", newline='\r\n') as f: 

ответ

6

Установите аргумент newline ключевое слово для open() к '\r\n', или, возможно, в пустую строку:

with open(filename, 'r', encoding='utf-8', newline='\r\n') as f: 

Это говорит Python только расщепленных прямых на \r\n терминатор линии; \n остается нетронутым на выходе. Если вы установите его на '', то \n также рассматривается как терминатор линии, но \r\n не переведен на \n.

От open() function documentation:

новой строки управляет тем, как работает режим universal newlines (это относится только к режиму текста). Это может быть None, '', '\n', '\r' и '\r\n'. [...] Если это '', универсальный режим новых линий включен, но окончания строки возвращаются вызывающему абоненту непереведенным. Если у него есть какие-либо другие правовые значения, строки ввода заканчиваются только данной строкой, а окончание строки возвращается непереведенному вызывающему.

Смелый акцент мой.

+0

Примечание: как аргумент mode, так и 'encoding' являются необязательными здесь (' 'r'' является режимом по умолчанию повсюду, и если вы не знаете, что кодировка является' utf-8', это может быть или не быть правильным кодирование для использования; на Windows 'utf-16' и языковые кодовые страницы одинаково распространены, если не более распространены). – ShadowRanger

+1

@ShadowRanger: конечно, но явно все еще лучше, чем неявное. Я всегда настоятельно рекомендую не оставлять «кодировку» по умолчанию. –

+0

Решение: 'с открытым (имя файла, 'r', encoding = 'utf-8', newline = '\ r \ n') как f:' спасибо за подсказку – lu1her

Смежные вопросы