2009-02-03 6 views
3

Cela fonctionnera-il sur toutes les plateformes? Je sais que Windows ne le fait pas, et souvenez-vous d'avoir écouté mac alors que Linux l'a fait. J'ai couru ce code sur windows donc ça semble bien, mais est-ce que l'un d'entre vous sait si son cross-plateforme?Python lisant les lignes w/o n?

while 1: 
    line = f.readline() 
    if line == "": 
     break 
    line = line[:-1] 
    print "\"" + line + "\"" 
+1

OS X utilise \ n - c'était seulement l'abomination qui était "classique" qui l'a fait. –

+0

Toute fin de ligne (y compris les caractères unicode) est automatiquement convertie en \ n. –

+0

-1: informations MacOS obsolètes. –

Répondre

13

Tout d'abord, il y a universal newline support

Deuxièmement: il suffit d'utiliser line.strip(). Utilisez line.rstrip('\r\n') si vous souhaitez conserver un espace au début ou à la fin de la ligne.

Oh, et

print '"%s"' % line 

ou au moins

print '"' + line + '"' 

peut sembler un peu plus agréable.

Vous pouvez parcourir les lignes dans un fichier comme celui-ci (cela ne cassera pas sur des lignes vides au milieu du fichier comme votre code):

for line in f: 
    print '"' + line.strip('\r\n') + '"' 

Si votre fichier d'entrée est assez courte, vous peut utiliser le fait que str.splitlines jette les fins de ligne par défaut:

with open('input.txt', 'rU') as f: 
    for line in f.read().splitlines(): 
     print '"%s"' % line 
+1

Cela supprimera tous les espaces avant et arrière, et pas seulement la fin de la ligne. –

+0

+1: ouvert (fichier, "rU") pour la nouvelle ligne universelle. –

+0

concis, complet, au point. – chryss

4

Essayez ceci:

line = line.rstrip('\r\n') 
0
ligne

= ligne [: - 1]

Une ligne ne peut avoir aucun retour à la ligne de fuite, si elle est la dernière ligne d'un fichier.

Comme suggéré ci-dessus, essayez newlines universel avec rstrip().

Questions connexes