1. ホーム
  2. python

[解決済み] TypeError: リストのインデックスは整数かスライスでなければならず、strではありません。

2022-03-13 07:14:27

質問

2つのリストを1つの配列に結合し、最終的にcsvファイルに格納したいのですが、どのようにすればよいのでしょうか?私はPythonの配列の初心者で、どうすればこのエラーを回避できるのか理解できません。

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

私のカウントはどのように機能するのですか?

どのように解決するのですか?

まず array_length は文字列ではなく、整数でなければなりません。

array_length = len(array_dates)

次に、あなたの for を使用してループを構築する必要があります。 range :

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

第3回 i は自動的にインクリメントされるので、次の行を削除してください。

i += 1


注:単に zip という2つのリストが同じ長さであることを意味します。

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)