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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top