Python - Запись в файлы CSV и для циклов

РЕДАКТИРОВАТЬ Утвержденный ответ является правильным, и все мои данные отображаются в файле, однако, поскольку он проходит по циклу и записывает каждый фрагмент информации в новую строку, данные неорганизованы и отображаются в виде каскадного шаблона. На данный момент это просто проблема форматирования. Кто-нибудь испытывает подобную проблему?

У меня есть цикл, в котором я определяю несколько переменных. Мне нужно напечатать значения этих переменных в CSV, не перезаписывая строки снова и снова. Я знаю, что решение этой проблемы заключается в размещении оператора with с помощью цикла for, но тогда python больше не распознает мои переменные.

Я думаю, что другой частью решения является добавление данных в переменные, чтобы вы могли вызывать их вне цикла for, но я не уверен, как это сделать для моего случая.

Пример:

for item in my_list:

    info  = inspect.getmembers(item)
    name = info[0]

import csv

with open("sample.csv", "w") as csvFile:
    fieldnames = ['Item Name']
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'Item Name': name })
csvFile.close()

В этом примере переменная "имя" не может быть определена, поскольку она определена в цикле for.

2 ответа

Решение
import csv
with open("sample.csv", "w") as csvFile:
    fieldnames = ['Item Name']
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames)
    writer.writeheader()

    for item in list:
        info  = inspect.getmembers(item)
        name = info[0]

        writer.writerow({'Item Name': name })

Положить with перед циклом, чтобы вы могли записать значения в файл из цикла for:

import csv
with open('sample.csv', 'w') as csvFile:
    fieldnames = ['Item Name']
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames)
    writer.writeheader()

    for item in list:
        # get the data you want from item
        info  = inspect.getmembers(item)
        name = info[0]

        # write the data to the file
        writer.writerow({'Item Name': name })

ПРИМЕЧАНИЕ (поскольку у меня пока недостаточно репутации, чтобы комментировать): csvFile.close() найти в ответе Рохана нет необходимости, так как это обрабатывается with заявление. Кроме того, согласно PEP8, он должен использовать 2 пробела, а не 4 для отступов.

Другие вопросы по тегам