Как конвертировать CRLF в LF на компьютере с Windows в Python

Итак, я получил эти шаблоны, все они заканчиваются на LF, и я могу заполнить некоторые термины форматом и все же получить файлы LF, открыв "wb"

Эти шаблоны используются в сценарии развертывания на компьютере Windows для развертывания на сервере Unix.

Проблема в том, что многие люди будут возиться с этим шаблоном, и я на 100% уверен, что некоторые из них поместят немного CRLF внутрь.

Как я мог с помощью Python преобразовать все CRLF в LF?

Благодарю.

РЕДАКТИРОВАТЬ

Что ж, мой плохой, у меня была ошибка в моем коде, открытие в "wb" всегда ставило lf в конце строк, даже если файл раньше использовал crlf.

Вот код, который я использую, если вам интересно:

#!/usr/bin/env python
# --*-- encoding: iso-8859-1 --*--

import string

def formatFile(templatePath, filledFilePath, params, target):
    openingMode = 'w'
    if target == 'linux':
        openingMode += 'b'

    with open(templatePath, 'r') as infile, open(filledFilePath, openingMode) as outfile:
        for line in infile:
            template = string.Template(line.decode('UTF-8'))
            outfile.write(template.substitute(**params).encode('UTF-8'))

Так что нет проблем, все работает нормально:x

4 ответа

Это мое решение для преобразования концов строк Windows (\r\n) в конец строки Linux/Unix (\n) в одном файле без создания дополнительного выходного файла.

windows_line_ending = '\r\n'
linux_line_ending = '\n'

filename = 'path/to/file'

with open(filename, 'rb') as f:
    content = f.read()
    content = content.replace(windows_line_ending, linux_line_ending)

with open(filename, 'wb') as f:
    f.write(content)

(Важно открыть файл в двоичном режиме)

С наилучшими пожеланиями, winklerrr

Открытая функция Python поддерживает 'rU' режим для универсальных символов новой строки, в этом случае не имеет значения, какой тип новой строки имеет каждая строка. В Python 3 вы также можете запросить конкретную форму новой строки с аргументом новой строки для открытия.

Таким образом, перевод из одной формы в другую довольно прост в Python:

with open('filename.in', 'rU') as infile,                 \
   open('filename.out', 'w', newline='\n') as outfile:
       outfile.writelines(infile.readlines())

(Из-за аргумента newline, U фактически устарел в Python 3; эквивалентная форма newline=None.)

Почему бы вам не попробовать ниже: str.replace ('\ r \ n', '\ n');

CRLF => \ r \ n LF => \ n

это история машинки =)

Можно исправить существующие шаблоны с запутанным окончанием этим кодом:

with open('file.tpl') as template:
   lines = [line.replace('\r\n', '\n') for line in template]
with open('file.tpl', 'w') as template:
   template.writelines(lines)
Другие вопросы по тегам