web-dev-qa-db-fra.com

Comment puis-je forcer la méthode file.write () de Python à utiliser le même format de nouvelle ligne sous Windows et sous Linux ("\ r \ n" ou "\ n")?

J'ai le code simple:

f = open('out.txt','w')
f.write('line1\n')
f.write('line2')
f.close()

Le code fonctionne sous Windows et donne la taille du fichier 12 bytes, et Linux donne 11 bytes La raison est nouvelle ligne

Sous Linux c'est \n et pour gagner c'est \r\n

Mais dans mon code, je spécifie la nouvelle ligne comme \n. La question est de savoir comment faire python conserver la nouvelle ligne sous la forme \n toujours, et pas vérifier le système d'exploitation.

59
user1148478

Vous devez ouvrir le fichier en mode binaire , c'est-à-dire wb au lieu de w. Sinon, les caractères de fin de ligne sont convertis automatiquement en caractères spécifiques au système d'exploitation.

Voici un extrait de Python référence à propos de open() .

La valeur par défaut consiste à utiliser le mode texte, qui peut convertir les caractères '\ n' en une représentation spécifique à la plate-forme en écriture et en lecture à la lecture.

92
Praveen Gollakota

Vous pouvez toujours utiliser le mode texte et forcer le retour à la ligne avec le mot clé newline.

f = open("./foo",'w',newline='\n')

Testé avec Python 3.4.2.

Edit: Cela ne fonctionne pas dans Python 2.7.