2017-09-14 1 views
0

J'ai ce code qui me permettra de compter le nombre de lignes de numéros manquants dans le csv pour un script en Python 3.6. Cependant, ce sont les erreurs suivantes dans le programme:ValueError dans le code Python 3

Erreur:

Traceback (most recent call last): 
    File "C:\Users\GapReport.py", line 14, in <module> 
    EndDoc_Padded, EndDoc_Padded = (int(s.strip()[2:]) for s in line) 
    File "C:\Users\GapReport.py", line 14, in <genexpr> 
    EndDoc_Padded, EndDoc_Padded = (int(s.strip()[2:]) for s in line) 
ValueError: invalid literal for int() with base 10: 'AC-SEC 000000001' 

code:

import csv 

def out(*args): 
    print('{},{}'.format(*(str(i).rjust(4, "0") for i in args))) 

prev = 0 
data = csv.reader(open('Padded Numbers_export.csv')) 

print(*next(data), sep=', ') # header 

for line in data: 
    EndDoc_Padded, EndDoc_Padded = (int(s.strip()[2:]) for s in line) 

if start != prev+1: 
    out(prev+1, start-1) 

prev = end 
    out(start, end) 

Je suis perplexe sur la façon de résoudre ces issues.Also, je pense que le csv beaucoup de lignes, donc s'il y a une section qui limite à quelques chiffres, n'hésitez pas à me mettre à jour.

CSV Snippet (Désolé si je n'étais pas clair avant!):

CSV Snippet

+0

L'erreur vous indique que vous ne pouvez pas convertir 'AC-SEC 000000001' en nombre entier. C'est logique. Cependant, nous ne pouvons pas voir un exemple de CSV, nous ne pouvons donc pas l'aider à le résoudre. – roganjosh

+0

J'ai récemment édité une photo du csv. J'espère que cela pourra aider. – PythonGroupie

+0

Ceci est juste une supposition, mais basé sur l'exemple, il semble que vous pourriez vouloir quelque chose comme 'EndDoc_Padded1, EndDoc_Padded2 = (int (s.split() [1]) pour s dans la ligne)'? – 0x5453

Répondre

0

Les valeurs que vous avez dans votre fichier CSV ne sont pas numériques.

Par exemple, FMAC-SEC 000000001 est pas un nombre. Ainsi, lorsque vous exécutez int(s.strip()[2:]), il n'est pas en mesure de le convertir en int.

Quelques autres commentaires sur le code:

  1. Quelle est l'utilité de faire EndDoc_Padded, EndDoc_Padded = (...)? Actuellement, vous attribuez des valeurs à deux variables portant le même nom. Soit nommez-en un autre, ou ayez juste une variable là-bas.

  2. Vous essayez d'obtenir les deux valeurs différentes de chaque colonne? Dans ce cas, vous devez d'abord diviser line en deux. Le contenu de votre fichier est-il séparé par des virgules? Si oui, alors faites for s in line.split(','), sinon utilisez la valeur de séparateur appropriée dans split().

  3. Vous exécutez ce dans une boucle, donc chaque fois que les valeurs des deux variables obtiendriez mis à jour les valeurs de la dernière ligne. Si vous essayez d'obtenir 2 listes de toutes les valeurs, cela ne fonctionnera pas.

+0

Merci! Pour est répertorié comme erreur de syntaxe maintenant pour le moment. – PythonGroupie

+0

Stupide moi, il est censé être Control Number_Padded et EndDoc_Padded. – PythonGroupie

+0

Voir ma réponse éditée et apporter les corrections dans votre question. – Antimony