TypeError:列表索引必须是整数或切片,而不是 str

新手上路,请多包涵

我有两个列表,我想合并到一个数组中,最后把它放在一个 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

我的计数如何工作?

原文由 Arthur C-G 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

首先, array_length 应该是整数而不是字符串:

 array_length = len(array_dates)

其次,您的 for 循环应该使用 range 构建:

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

第三, i 会自动递增,所以删除下面一行:

 i += 1


请注意,也可以只是 zip 这两个列表具有相同的长度:

 import csv

dates = ['2020-01-01', '2020-01-02', '2020-01-03']
urls = ['www.abc.com', 'www.cnn.com', 'www.nbc.com']

csv_file_patch = '/path/to/filename.csv'

with open(csv_file_patch, 'w') as fout:
    csv_file = csv.writer(fout, delimiter=';', lineterminator='\n')
    result_array = zip(dates, urls)
    csv_file.writerows(result_array)

原文由 Alexander 发布,翻译遵循 CC BY-SA 4.0 许可协议

跟进上面的 Abdeali Chandanwala 回答(无法发表评论,因为 rep<50)-

TL;DR:我试图通过专注于迭代字典中的键来错误地迭代字典列表,但不得不迭代字典本身!


我在使用这样的结构时遇到了同样的错误:

 {
   "Data":[
      {
         "RoomCode":"10",
         "Name":"Rohit",
         "Email":"rohit@123.com"
      },
      {
         "RoomCode":"20"
         "Name":"Karan",
         "Email":"karan@123.com"
      }
   ]
}

我试图将这些名字附加到这样的列表中——

收到同样的错误

修复它 -

修复了错误

原文由 rohetoric 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题