小能豆

TypeError: list indices must be integers or slices, not str

javascript

我有两个列表,想要合并为一个数组,最后将其放入 csv 文件中。

如何避免此错误:

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)

并得到:

  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

我的计数怎样进行?


阅读 40

收藏
2024-07-20

共1个答案

小能豆

您遇到的错误是由于代码中索引和列表操作处理不正确造成的。让我们分解并修复您的fill_csv函数:

  1. 问题array_length
  2. array_length被设置为 的长度的字符串表示形式array_dates。您应该使用整数长度来迭代索引。
  3. 索引问题
  4. 您正在尝试使用result_array[i][0].append(array_urls[i]),但result_array[i][0]不正确。result_array被初始化为空列表,因此您需要正确地将列表附加到它。
  5. 不正确的迭代
  6. 您应该迭代数组的长度范围,而不是array_length

这是该函数的更正版本fill_csv

import csv

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

    # We assume both lists are of the same length
    for i in range(len(array_dates)):
        # Append each pair of URL and date to the result_array
        result_array.append([array_urls[i], array_dates[i]])

    # Write to CSV file
    with open(csv_file_path, "w", newline='') as file:
        csv_file = csv.writer(file, delimiter=';', lineterminator='\n')
        csv_file.writerows(result_array)

主要变化:

  1. 用途range(len(array_dates)):遍历列表长度范围以通过索引访问元素。
  2. 正确的列表操作:直接将对附加[array_urls[i], array_dates[i]]result_array
  3. 文件处理:用于with open(...) as file确保写入后文件正确关闭。

此函数现在将array_urls和合并array_dates为一个列表列表(result_array),其中每个内部列表包含一个 URL 及其对应的日期。然后它将此列表写入指定的 CSV 文件。

2024-07-20