2017-09-14 13 views
0

J'ai le fichier et le code suivants qui fonctionnent très bien, mais (voir ci-dessous) en utilisant les mêmes méthodes, le deuxième extrait de code avec le fichier donné, génère une erreur.Anomalie dans la lecture du fichier csv colonne

Code de travail

def test(): 
    with open('test.txt','r') as f: 
     reader=csv.reader(f) 
     for row in reader: 
      print(row[0]) #this is column 1 
      answer=input("Answer?>>") 
      if answer==row[1]: #this is column 2 
       print("Yes") 
      else: 
       print("No") 

Contenu du fichier

a,1 
b,2 
c,3 

sortie fonctionnement correct

>>> test() 
a 
Answer?>>1 
Yes 
b 
Answer?>>2 
Yes 
c 
Answer?>> 

Cependant, le code suivant ne fonctionne pas:

def round(): 
    print("===Summary===") 
    with open('eventinfo.txt','r',newline="") as f: 
     reader=csv.reader(f) 
     for row in reader: 
      print(row[0]) 

Contenu du fichier: (la ligne supplémentaire entre les enregistrements semble avoir été créé lors de l'écriture dans le fichier)

1,Techhamper,9,9,9,9,9,27 

1,Moosecream,8,8,8,8,8,24 

1,BizTech,6,6,6,6,6,18 

1,Pigacheepot,1,1,1,1,1,3 

2,Techhamper,1,1,1,1,1,3 

2,Moosecream,2,2,2,2,2,6 

Erreur:

print(row[0]) 
IndexError: list index out of range 

Le code qui écrit dans ce fichier est le suivant:

with open("eventinfo.txt","a") as fo: 
      writer=csv.writer(fo) 
      writer.writerow([round,inventor,i1,i2,i3,i4,i5,totalscore]) 

Pour une réponse, je serais très heureux si:

  1. Une solution/solution de l'erreur dans le code qui lit le fichier (comment dépouiller le nouveau personnage le plus efficace de la ligne)

  2. De plus, quelle est la meilleure façon d'ajouter ou de réécrire mon ' write 'code, pour créer plus efficacement le contenu du fichier (pour être comme le premier qui n'a pas le retour à la ligne entre chaque enregistrement) en premier lieu.

Merci à l'avance

Répondre

1

vous pouvez sauter des lignes vides en cochant la longueur row:

for row in reader: 
    if len(row) > 0: 
     print(row[0]) 

Je ne vois rien dans le code d'écriture qui créerait des lignes vides, bien que , donc je ne suis pas sûr de savoir comment résoudre ce problème. Ecrivez-vous sur le même système d'exploitation que vous lisez? Sinon, cela pourrait être dû à des différences dans les conventions de fin de ligne.

Si le problème concerne les retours à la ligne, vous pouvez peut-être corriger le code du lecteur en utilisant newline=None (valeur par défaut) au lieu de newline="".

+0

j'ai enlevé le newline = "" dans le code de lecteur et ai essayé newline = Aucun, mais aucun travaillé – MissComputing

+0

je ne peux pas voir comment les lignes vierges sont créées non plus ... n'importe qui n'importe qui ??? Et non, malheureusement, je n'utilise que le même système d'exploitation – MissComputing

+0

Est-il possible que 'totscore' se termine par un saut de ligne? – Barmar