2010-07-07 10 views
7

Wie kann ich das ^M Zeichen aus einer Textdatei (am Ende der Zeile) in einem Python-Skript entfernen?Wie zu entfernen^M

Ich habe Folgendes getan, und es gibt ^M bei jedem Zeilenumbruch.

file = open(filename, "w") 
file.write(something) 
+0

können Sie mehr aus Ihrem Code schreiben ?. Dont't wissen, wo^M herkommt. Zeilenendmarke machen und "\ n" nicht "^ M" Melden Sie sich an, um "file.close()" zu schließen. Verwenden Sie keine Datei ist ein reserviertes Wort in Python Verwenden Sie my_file oder etwas. – snippsat

+0

@snippsat^M ist das Terminal-Zeichen Escape, das als '\ n' in C-Syntax geschrieben wird –

+3

@Pete:^M ist '\' –

Antwort

8

Wenn Sie die Datei schreiben, sollten Sie open(filename, "wb") angeben. Auf diese Weise schreiben Sie im Binärmodus, und Python versucht nicht, die richtigen Zeilenumbrüche für das System zu ermitteln, auf dem Sie sich befinden.

+0

Vielen Dank für Ihre Antwort, aber ich versuche, etwas zu "Datei" zu schreiben und es scheint, Universal Newline-Modus kann nur verwendet werden mit 'rU', wenn ich mich nicht irre. Es funktioniert sowieso nicht für mich. – DGT

4

Python kann eine Datei im Binärmodus oder im Textmodus öffnen. Text ist die Standardeinstellung, also bedeutet ein Modus "w" Schreiben im Textmodus. Im Textmodus passt Python die Zeilenenden für die Plattform an, auf der Sie sich befinden. Das bedeutet unter Windows:

f = open("foo.txt", "w") 
f.write("Hello\n") 

wird eine Textdatei mit "Hello \ r \ n" ergeben.

Sie können die Datei in Binär-Modus öffnen, indem Sie "b" im Modus:

f = open("foo.txt", "wb") 
f.write("Hello\n") 

Ergebnisse in einer Textdatei mit "Hallo \ n".

+0

Eigentlich kommt das "etwas" aus dem HTML-Formular, wo ich "etwas" kopiere und einfüge. Das Skript erhält dann den Wert: something = form["some_name"].value DGT

2

dos2unix filename.py

die Zeilenumbrüche zu UNIX Stil zu konvertieren.

1

string.replace ('\ r', '') arbeitete für mich.

Hässlich, aber noch r + noch r + b noch nichts gearbeitet ELSE (für mich, sicher) :(

0

Für Portabilität, können Sie versuchen, den folgenden

import os 
file = open(filename, "w") 
file.write(something.replace('\r\n', os.linesep)) 
-1

Lauf autopep8 auf die Datei

> apt-get install python-autopep8 

> autopep8 python_file_name > new_python_file_name.py 
+0

Das ist nicht, was er fragt. Dies hätte wahrscheinlich auch andere Nebenwirkungen; Beantworten Sie die Frage mit detaillierten und realen Lösungen. – kevr