Ignorer dernière \ n lors de l'utilisation readlines avec python
Question
J'ai un fichier j'ai lu qui ressemble à:
1 value1
2 value2
3 value3
Le fichier peut ou non avoir une fuite \ n dans la dernière ligne.
Le code J'utilise fonctionne très bien, mais s'il y a un \ n arrière, il échoue.
Quelle est la meilleure façon de rattraper cela?
Mon code de référence:
r=open(sys.argv[1], 'r');
for line in r.readlines():
ref=line.split();
print ref[0], ref[1]
Ce qui échouerait avec:
Retraçage (appel le plus récent en dernier):
Fichier "./test", ligne 14,
Imprimer ref [0], ref [1]
IndexError: liste des index hors de portée
La solution
Vous pouvez ignorer les lignes qui ne contiennent que des espaces:
for line in r.readlines():
line = line.rstrip() # Remove trailing whitespace.
if line: # Only process non-empty lines.
ref = line.split();
print ref[0], ref[1]
Autres conseils
Je ne pense pas que vous nous avez dit toute l'histoire. line.split()
donnera le même résultat indépendamment du fait que la dernière ligne se termine par \n
ou non.
Notez que la dernière ligne dans un fichier étant terminé par \n
est le comportement HABITUDE, et les gens sont parfois gênés par une ligne qui est pas terminée.
Si vous deviez faire quelque chose comme:
print repr(line), repr(ref)
au lieu de
print ref[0], ref[1]
vous seriez en mesure de détecter pour vous-même exactement ce qui se passe, au lieu de nous laisser deviner.
Si comme Byers @ Mark émet l'hypothèse, votre dernière ligne est vide ou ne se compose que d'espaces, vous pouvez ignorer cette ligne (et toutes les autres telles lignes) par ce code un peu plus simple:
for line in r: # readlines is passe
ref = line.split() # split() ignores trailing whitespace
if ref:
print ref[0], ref[1]
S'il vous plaît également envisager la possibilité que vous avez un seul champ, pas 0 ou 2, dans votre dernière ligne.