2015-09-13 16 views
16

Tôi có hai danh sách mà tôi muốn hợp nhất trong một mảng để cuối cùng đặt nó vào tệp csv. Tôi là một newbie với mảng Python và tôi không hiểu tại sao tôi có thể tránh được lỗi này:LoạiError: chỉ mục danh sách phải là số nguyên hoặc lát, không phải là str

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) 

Và có:

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 

thế nào có thể làm việc đếm của tôi?

+2

Bạn rõ ràng làm cho 'array_length' một chuỗi, vì vậy' i' là một ký tự không phải là một số ... – jonrsharpe

+0

Rất tiếc, tôi đã không nhìn đúng cách .... cảm ơn bạn !! – Zoloom

+1

điều này xảy ra với tôi khi tôi nghĩ rằng tôi đang phân tích cú pháp '{thisthing}' khi thực sự tôi phân tích cú pháp '[{thisthing}]'; ví dụ: tôi đã cố gắng giải quyết một từ điển nhưng thực ra tôi đang xử lý một danh sách. Dynamic gõ ftw. – Tommy

Trả lời

10

Thứ nhất, array_length phải là số nguyên và không phải là một chuỗi:

array_length = len(array_dates) 

Thứ hai, for vòng lặp của bạn nên được xây dựng bằng range:

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

Thứ ba, i sẽ tự động tăng, vì vậy xóa dòng sau:

i += 1 
+0

Cảm ơn, tôi không biết tăng tự động! :) Mã của tôi hoạt động, cảm ơn bạn. – Zoloom

+0

Không có phép thuật: 'i' là phần tử của danh sách được trả về bởi phạm vi (hoặc chuỗi trong python 3). Oh, BTW: họ là tất cả các danh sách, không phải mảng. – Pynchia

Các vấn đề liên quan