2016-04-05 3 views
3

Also habe ich diese Vorlage, sie alle enden in LF und ich kann einige Begriffe innen mit Format füllen und immer noch LF Dateien mit „wb“Wie CRLF konvertieren auf einem Windows-Rechner in Python an LF

Öffnung

Diese Vorlagen werden in einem Bereitstellungsskript auf einem Windows-Computer zur Bereitstellung auf einem Unix-Server verwendet.

Problem ist, eine Menge Leute werden sich mit diesen Vorlage, und ich bin 100% sicher, dass einige von ihnen einige CRLF hineinlegen werden.

Wie könnte ich, mit Python alle crlf zu konvertieren lf?

Danke.

EDIT

Nun, mein schlecht, ich hatte einen Fehler in meinem Code, Eröffnung im „wb“ immer am Ende setzen lf der Linien, auch wenn die Datei, bevor crlf benutzt. Hier

ist der Code ich benutze, wenn Sie sich fragen:

#!/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')) 

Also kein Problem, alles funktioniert gut: x

Antwort

5

Pythons open Funktion unterstützt den 'rU' Modus für universal newlines, in denen Es ist egal, welche Art von Zeilenumbruch jede Zeile hat. In Python 3 können Sie auch eine bestimmte Form von Newline mit der newline argument for open anfordern.

von einer Form ist, zu dem anderen Translating somit ziemlich einfach in Python:

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

(Aufgrund des Neuen-Zeile-Argument ist die U in Python 3 tatsächlich veraltet, die äquivalente Form newline=None ist.)

0

Es ist möglich, vorhandene Vorlagen zu beheben mit verkorksten mit diesem Code endet:

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) 
0

warum Sie versuchen, unten nicht :: str.replace ('\ r \ n', '\ n');

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

es ist Geschichte der Schreibmaschine =)

3

Dies ist meine Lösung Windows-Zeilenende (\r\n) auf Linux/Unix-Zeilenende zu konvertieren (\n) in einer Datei, ohne eine zusätzliche Ausgabedatei zu erstellen.

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) 

(Es ist wichtig, die Datei in Binär-Modus zu öffnen)

Mit freundlichen Grüßen, winklerrr

Verwandte Themen