Как спарсить csv файл на python?

Мне нужно, чтобы первый столбик таблицы записывался в переменную, а остальные столбики(их количество может различаться) записывался в список, чтобы далее из списка достать нужное значение. Пример таблицы. Я пытаюсь достать email адреса, но в самой таблице каша, поэтому необходимо проверять каждый столбик.

with open('data.csv', 'r', encoding='utf-8-sig', newline='') as file:
    reader = csv.reader(file, delimiter=',')
    name = reader[0]

    for items in reader:
        items = items.split(',')
        for item in items:
            if '@' in item:
                email = item

С этим кодом выходит ошибка:

TypeError: '_csv.reader' object is not subscriptable

Новый код:

with open('data.csv', 'r', encoding='utf-8-sig', newline='') as file:
    reader = csv.reader(file)
    name = list(next(reader))

    for items in list(reader):
        for item in items:
            if '@' in item:
                if not item in emails:
                    emails.append(item)
                

    with open('result.csv', 'a', encoding='utf-8-sig', newline='') as file:
        writer = csv.writer(file, delimiter=';')
        for email in emails:
            writer.writerow(
                (
                    name,
                    email
                )
            )
Наименование,Описание,Адрес,Комментарий к адресу,Почтовый индекс,Микрорайон,Район,Город,Округ,Регион,Страна,Часы работы,Часовой пояс,Телефон 1,E-mail 1,Веб-сайт 1,Instagram 1,Twitter 1,Facebook 1,ВКонтакте 1,YouTube 1,Skype 1,Широта,Долгота,2GIS URL
Магазин автозапчастей,,"Мира, 007",,655153,,,Черногорск,Черногорск городской округ,Республика Хакасия,Россия,Пн: 09:00-18:00; Вт: 09:00-18:00; Ср: 09:00-18:00; Чт: 09:00-18:00; Пт: 09:00-18:00; Сб: 09:00-18:00,+07:00,89130502009,[email protected],http://avtomagazin.2gis.biz,,,,,,,53.805192,91.334047,https://2gis.com/firm/9711414977516651
Спектр-Авто,автотехцентр,"Вяткина, 4",1 этаж,655017,,,Абакан,Абакан городской округ,Республика Хакасия,Россия,Пн: 09:00-18:00; Вт: 09:00-18:00; Ср: 09:00-18:00; Чт: 09:00-18:00; Пт: 09:00-18:00; Сб: 09:00-18:00,+07:00,89233931771,[email protected],http://spectr-avto.2gis.biz,,,,,,,53.716581,91.45005,https://2gis.com/firm/70000001034136187

В результате получается:

['Наименование', 'Описание', 'Адрес', 'Комментарий к адресу', 'Почтовый индекс', 'Микрорайон', 'Район', 'Город', 'Округ', 'Регион', 'Страна', 'Часы работы', 'Часовой пояс', 'Телефон 1', 'E-mail 1', 'Веб-сайт 1', 'Instagram 1', 'Twitter 1', 'Facebook 1', 'ВКонтакте 1', 'YouTube 1', 'Skype 1', 'Широта', 'Долгота', '2GIS URL'];[email protected]
['Наименование', 'Описание', 'Адрес', 'Комментарий к адресу', 'Почтовый индекс', 'Микрорайон', 'Район', 'Город', 'Округ', 'Регион', 'Страна', 'Часы работы', 'Часовой пояс', 'Телефон 1', 'E-mail 1', 'Веб-сайт 1', 'Instagram 1', 'Twitter 1', 'Facebook 1', 'ВКонтакте 1', 'YouTube 1', 'Skype 1', 'Широта', 'Долгота', '2GIS URL'];[email protected]

Ответы (1 шт):

Автор решения: Сергей Кох

Как говорится в сообщении об ошибке, программы чтения csv не поддерживают индексирование. Значение, возвращаемое csv.reader не является списком; это итератор по строкам.

Если вы хотите, вы можете составить список всех строк с data_list = list(csv.reader). Затем вы можете проиндексировать этот список, как и любой другой.

Поэтому:

import csv
emails = list()

with open('data.csv') as f:
    csv_reader = csv.reader(f)

    # Записываем заголовок
    name = list(next(csv_reader))

    for items in list(csv_reader):
        for item in items:
            if '@' in item:
                emails.append(item)
→ Ссылка