2017-05-27 2 views
0

Vous avez un petit problème ici.Python - Conversion de fichier CSV - longueur d'un objet

for row in reader: 
    dane_wejsciowe.append(row) 

J'ai eu quelques .csv * Je veux convertir et mon convertisseur agit bizarre ... la fonction ci-dessus prend toutes les colonnes nécessaires dans un tableau et après que je vous appelle ces colonnes à compter la longueur il:

for line in dane_wejsciowe: 
    if len(line['Mnemonik']) > len_mnemonik: 
     len_mnemonik += 1 

Après que je suis l'impression du dossier print(' - Mnemonik: ' + str(len_mnemonik)) et le résultat est 22 mais le plus long est BEUS_EnergyDriveAvgDist qui contient _ et je soupçonne son sans compter les lettres spéciales

et mon idée d'imprimer dans un fichier était

if len(i['Mnemonik']) < len_mnemonik: 
     a = len_mnemonik - len(i['Mnemonik']) + 1 
    else: 
     a = 1 
    jsfile.write(i['Mnemonik']), 
    jsfile.write((' ')*a), 

Any1 « idiotes » ont une meilleure idée de le faire? :)

+0

désolé pour non précisez la question. Je dois l'imprimer avec un certain nombre d'espaces blancs pour le rendre agréable en colonnes. C'est pourquoi j'ai autre chose: a = 1 parce que si le script a frappé le plus long, il doit toujours y avoir un espace - pour faire une colonne. –

Répondre

0
if len(line['Mnemonik']) > len_mnemonik: 
    len_mnemonik += 1 

Je ne sais pas pourquoi vous pensez que le code ci-dessus finirait par vous donner la valeur maximale de len_mnemonik, en particulier la partie += 1. Vous devriez plutôt faire:

if len(line['Mnemonik']) > len_mnemonik: 
    len_mnemonik = len(line['Mnemonik']) 

ou:

len_mnemonik = max(len_mnemonik, len(line['Mnemonik'])) 

(pas instruction if)

+0

cuz c'est dans une boucle 'pour la ligne dans dane_wejsciowe: si len (ligne ['Mnemonik'])> len_mnemonik: len_mnemonik + = 1' –

+1

@ OskarGarczyński Je sais que c'est dans une boucle, mais votre logique n'a pas de sens . S'il y a deux lignes dans le CSV alors 'len_mnemonik + = 1' arrivera juste deux fois (ou moins) donc' len_mnemonik' sera au plus 2 à la fin. –

1

Il semble que vous utilisez csv.reader() pour recueillir chaque ligne, qui analyse automatiquement chaque ligne dans une liste en utilisant le délimiteur spécifié dans la commande (la valeur par défaut est une virgule). Pour cette raison, votre variable dane_wejsciowe est une liste (?) De listes, où chaque élément externe (par exemple dane_wejsciowe[0]) est une ligne du fichier CSV, et chaque élément interne (par exemple dane_wejsciowe[0][0]) est une cellule dans cette ligne du fichier CSV. Par conséquent, votre len()==22 n'a rien à voir avec le texte BEUS_EnergyDriveAvgDist, mais vous indique le nombre de colonnes dans votre fichier CSV.