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 для отступов.