2010-01-01 3 views
-1

Je suis aux prises avec quelque chose qui doit être l'un de ces problèmes «si évident que je suis un idiot». J'ai un fichier csv que je veux lire et utiliser pour créer des «tables» individuelles. J'ai une variable (RID) qui marque le début d'une nouvelle «table».Problèmes assignant des valeurs dict à des variables

Je n'arrive pas à faire avancer ma variable indicateur (currentRow) lorsque je termine la manipulation de chaque ligne. Vous pouvez voir les instructions d'impression, currentRow reste égal à 0.
Mais si j'utilise une instruction d'affectation en dehors de la boucle, je peux changer la valeur de currentRow à volonté. La tâche de test consiste simplement à comprendre où je suis dans la boucle.

currentRow=0 
test=0 
theTables=defaultdict(list) 
for line in csv.DictReader(open(r'c:\temp\testread.csv')): 
    newTableKey=line['CIK']+'-'+line['RDATE']+'-'+line['CDATE']+'-'+line['FNAME']+' '+line['TID'] 

    if line['RID']=='1': 
     test+=1 # I can get here 
     if currentRow>int(line['RID']): 
      print 'got here' 

      theTables[oldTableKey]=theList 
      test+=1 # I cannot get here 
     theList=[] 
    theList.append(line) 
    currrentRow=int(line['RID']) 
    print currentRow #this value always prints at 0 
    print int(line['RID']) #this prints at the correct value 
    oldTableKey=newTableKey 
+0

Peut-être que je suis confus, mais d'où vient le 'row ['RID']'? Je ne vois pas de variable 'row' ailleurs que sur cette ligne. – Amber

+0

chaque ligne est un dictionnaire, il y a une clé appelée RID dans la ligne (un en-tête de colonne) – PyNEwbie

+0

Il y a quelque chose qui ne va pas avec votre exemple de code. Vous imprimez 'int (row ['RID'])' qui n'est assigné nulle part dans le code. S'il s'agit d'une faute de frappe et que vous imprimez int (ligne ['RID']) et qu'elle diffère de ce qui est assigné à currentRow, alors vous n'avez pas inséré tout votre code; en particulier vous avez omis quelque chose d'important qui modifie currentRow à nouveau après l'affectation. En outre, pourriez-vous inclure le format CSV? – kibitzer

Répondre

7

Dans la ligne:

currrentRow=int(line['RID']) 

vous avez troisr s dans currrentRow. Réduisez-les à deux, et les choses devraient s'améliorer.

+0

Merci Alex Je savais que c'était un de ces types de problèmes , l'humiliation publique est bonne pour l'âme. Acclamations – PyNEwbie

+2

Et exécutez pylint ou des outils similaires sur le code de sorte que vous n'avez pas besoin de demander à Alex de revoir votre code à chaque fois. ;-) Voir http://infinitemonkeycorps.net/docs/pph/#id3 –

0

Une solution consiste à ajouter ce qui suit quelque part dans la boucle:

currentRow += 1 

Cependant, une meilleure solution peut être d'utiliser dénombrable:

for currentRow, line in csv.DictReader..: 
    stuff 
+0

currrentRow = int (ligne ['RID']) – PyNEwbie

0

Il me semble que c'est possible que theTables[oldTableKey]=theList puisse être exécuté avec une valeur non initialisée de oldTableKey.

Questions connexes