7
votes

Indice de liste Python hors de portée de la valeur de retour de la scission

J'écris un script simple qui tente d'extraire le premier élément de la deuxième colonne d'un fichier d'entrée .txt. xxx

mon fichier d'entrée ressemble à ceci: xxx

Je veux que mon délimiteur soit une virgule. Lorsque j'imprime la longueur de la ligne, je reçois 5 éléments (comme prévu). Cependant, chaque fois que j'essaie d'indexer la liste pour extraire les données (c'est-à-dire lorsque j'appelle imprimer la ligne [1] ), je continue à obtenir l'erreur suivante: xxx

Je ne comprends pas pourquoi il est hors de portée quand il n'est clairement pas.


3 commentaires

Veuillez fournir la traçabilité complète et les valeurs de toutes les variables pertinentes: sscce.org


Je suis un débutant total à Python. Comment puis-je vous fournir la traçabilité complète?


Ligne d'impression et voyez ce que vous obtenez


4 Réponses :


9
votes

Je suppose que vous avez une ligne vierge quelque part dans votre fichier. Si elle exécute les données et génère ensuite l'exception, la ligne vide sera à la fin de votre fichier.

Veuillez insérer xxx

avant votre xxx

comme vérification pour vérifier si c'est le cas.

Vous pouvez toujours utiliser cette construction pour tester les lignes vierges et uniquement traiter / imprimer non -blank lignes: xxx


1 commentaires

@AYL Si cela ou l'une des autres réponses de cette page résolva votre problème, veuillez envisager Accepter cette question en cliquant sur la coche en regard de la réponse. Cela récompensera les deux parties avec des points de repère et marquera ce problème comme résolu.



2
votes

Lorsque vous travaillez avec la liste et essayez d'obtenir de la valeur à l'index particulier, il est toujours sûr de voir dans l'index se situe dans la plage xxx pré>

voir: p>

import sys

if (len(sys.argv) > 1):
    f = open(sys.argv[1], "r")
    print "file opened"

for line in f:
    line = line.strip().strip('\n')
    # Ensure that you are not working on empty line
    if line:
        data = line.split(",") 
    # Ensure that index is not out of range
    if len(data) > 1: print data[1]

f.close()


2 commentaires

J'ai trouvé que certains de mes fichiers d'entrée avaient des parties des données coupées sur la dernière ligne du fichier texte (


@AYL: Je voulais juste montrer une approche et des sauvegardes qui doivent toujours être utilisées lors de l'utilisation de l'index de la liste.



2
votes

Vous avez probablement des lignes vides après vos données, j'ai dirigé votre code de test sans qu'ils fonctionnaient comme prévu. XXX PRE>

Si vous ne voulez pas les supprimer, alors simplement Vérifiez les lignes vides. P>

for line in f:
    if line.strip(): # strip will remove all leading and trailing whitespace such as '\n' or ' ' by default    
        line = line.strip("\n ' '")
        line = line.split(",") 
        print line[1]


0 commentaires

0
votes

Il peut être utile d'attraper l'exception une impression des lignes incriminées xxx


0 commentaires