Я пытаюсь экспортировать HTML-таблицу в файл CSV. В настоящее время это работает, но заголовки все перемешаны. Я где-то читал, что это то, что делает DictWriter, но мне нужен способ исправить это.
Если бы я указывал headers = ["Apples", "Bananas", "Oranges"]
и следовал за этим, w = csv.DictWriter(response, fieldnames=headers())
и w.writeheader()
, я бы получил заголовки в указанном порядке, но я не могу этого сделать, потому что я использую его для нескольких файлов которым нужны разные заголовки.
Вот мой код:
# CSV function
def intents_to_csv(data, file_name, *args, **kwargs):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=".{}.csv"'.format(file_name)
w1 = csv.writer(response, delimiter=',')
headers = [x for x in data[0]]
w = csv.DictWriter(response, fieldnames=headers) # writing the csv data to a response object.
w.writeheader()
w.writerows(data)
return response
Пример сбора данных для функции:
student_intents = []
for intent in fall_info:
data = {}
data["Employee"] = intent.employee
data["Position"] = intent.position
data["Cross Train"] = intent.cross_train
data["Shirtsize"] = intent.shirtsize()
data["Email"] = intent.employee.email
data["Phone #"] = intent.employee.phone
data["Date Created"] = intent.date_created.date()
student_intents.append(data)
return intents_to_csv(student_intents, file_name)
Когда я запускаю print(headers)
, они печатают в следующем порядке:
['Email', 'Position', 'Employee', 'Cross Train', 'Shirtsize', 'Phone #', 'Date Created']
РЕДАКТИРОВАТЬ: Похоже, что здесь просто перевернуты «Электронная почта» и «Сотрудник», но это еще более перемешано для различной информации с большим количеством заголовков.