web-dev-qa-db-fra.com

TypeError: les index de liste doivent être des entiers ou des tranches, pas str

J'ai deux listes que je veux fusionner dans un tableau pour finalement le mettre dans un fichier csv. Je suis un débutant avec les tableaux de Python et je ne comprends pas comment je peux éviter cette erreur:

def fill_csv(self, array_urls, array_dates, csv_file_path):
    result_array = []
    array_length = str(len(array_dates))

    # We fill the CSV file
    file = open(csv_file_path, "w")
    csv_file = csv.writer(file, delimiter=';', lineterminator='\n')

    # We merge the two arrays in one

    for i in array_length:
        result_array[i][0].append(array_urls[i])
        result_array[i][1].append(array_dates[i])
        i += 1

    csv_file.writerows(result_array)

Et j'ai:

  File "C:\Users\--\gcscan.py", line 63, in fill_csv
    result_array[i][0].append(array_urls[i])
TypeError: list indices must be integers or slices, not str

Comment mon compte peut-il fonctionner?

33
Zoloom

Tout d'abord, array_length devrait être un entier et non une chaîne:

array_length = len(array_dates)

Deuxièmement, votre boucle for devrait être construite avec range:

for i in range(array_length):  # Use `xrange` for python 2.

Troisièmement, i sera incrémenté automatiquement, supprimez donc la ligne suivante:

i += 1
29
Alexander

J'ai eu la même erreur et l'erreur était que j'avais ajouté liste et dictionnaire dans une liste et que lorsque je parcourais la liste des dictionnaires et que j'utilisais pour frapper un objet de la liste, j'avais l'habitude d'obtenir cette erreur.

C'était une erreur de code et je me suis assuré que je n'avais ajouté que des objets de dictionnaire à cette liste, ce qui a également résolu mon problème.

1