2010-07-07 4 views
7

Comment puis-je supprimer le caractère ^M d'un fichier texte (en fin de ligne) dans un script Python?Comment supprimer^M

J'ai fait ce qui suit, et il y a ^M à chaque coup d'entrée.

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

Pouvez-vous poster plus de votre code ?. Dont't savoir où^M vient. caractère de nouvelle ligne et faire "\ n" pas "^ M" Rappelez-vous de fermer "file.close()" Ne pas utiliser le fichier est un mot réservé dans python utiliser my_file ou quelque chose. – snippsat

+0

@snippsat^M est l'échappement du caractère terminal qui est écrit comme '\ n' dans la syntaxe C –

+3

@Pete:^M est '\ r' –

Répondre

8

Si vous écrivez le fichier, vous devez spécifier open(filename, "wb"). De cette façon, vous écrirez en mode binaire et Python ne tentera pas de déterminer les nouvelles lignes correctes pour le système sur lequel vous vous trouvez.

+0

Merci pour votre réponse, mais j'essaie d'écrire «quelque chose» à «fichier» et il semble que «Universal newline mode» ne peut être utilisé avec 'rU', si je ne me trompe pas. Ça ne marche pas pour moi, de toute façon. – DGT

4

Python peut ouvrir un fichier en mode binaire ou en mode texte. Le texte est la valeur par défaut, donc un mode de "w" signifie écrire en mode texte. En mode texte, Python ajustera les fins de ligne de la plate-forme sur laquelle vous vous trouvez. Cela signifie que sous Windows, ce code:

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

donnera un fichier texte contenant "Hello \ r \ n".

Vous pouvez ouvrir le fichier en mode binaire en utilisant « b » en mode:

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

résultats dans un fichier texte contenant « Bonjour \ n ».

+0

En fait, ce 'quelque chose' vient de la forme html textarea, où je copie et colle 'quelque chose'. Le script obtient alors la valeur: something = form["some_name"].value DGT

2

dos2unix filename.py

pour convertir les sauts de ligne de type UNIX.

1

string.replace ('\ r', '') a fonctionné pour moi.

laid, mais ni r + ni r + b, ni RIEN D'AUTRE travaillé (pour moi, bien sûr) :(

0

Pour la portabilité, vous pouvez essayer ce qui suit

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

run autopep8 sur le fichier

> apt-get install python-autopep8 

> autopep8 python_file_name > new_python_file_name.py 
+0

Ce n'est pas ce qu'il demande. Cela aurait aussi probablement d'autres effets secondaires; répondez à la question posée avec des détails et de vraies solutions. – kevr