Как конвертировать 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)