[英]Writing several fields in one row in a csv with python
我正在为心理测试改进一些开源代码。 对于数据输出,我正在使用python的CSV模块,该模块本身可以正常工作。 数据输出取决于Django模型(试用版)和相应的数据库条目,我想将来自另一个模型(参与者)的数据添加到CSV中。 到目前为止,我仅设法在新行中添加了所需的条目,但这基本上使CSV无法在统计程序中进一步使用。 简而言之,我得到了:
headers of database entry 1
headers of database entry 2
values of database entry 1
values of database entry 2
但是我想要的是输出看起来像这样:
headers of database entry 1 followed by 2
values of database entry 1 followed by 2
这就是出口的重要部分。
def export_as_csv(modeladmin, request, queryset):
headers, fields = zip(*export_info_trial)
headers_participant, fields_participant = zip(*export_info_participant)
zipFile = ZipFile(in_memory, 'w')
for participant in queryset:
rows = [headers_participant] + [headers]
participants = Participant.objects.filter(id=participant.id)
trials = Trial.objects.filter(participant=participant.id)
for participant_value_list in participants.values_list(*fields_participant):
rows.append([unicode(v) for v in participant_value_list])
for trial_value_list in trials.values_list(*fields):
rows.append([unicode(v) for v in trial_value_list])
我确实知道,现在的输出是由我两次调用rows.append引起的,但是现在我不知道如何巧妙地(或根本不)组合这两个调用。
编辑:作者被称为如下:
f = StringIO()
writer = UnicodeWriter(f)
for row in rows:
writer.writerow(row)
我还添加了上面函数的前面部分。
我感谢大家的帮助!
您可以使用python CSV的csv.writer的writerow,如下所示:
def export_as_csv(modeladmin, request, queryset):
headers, fields = zip(*export_info_trial)
headers_participant, fields_participant = zip(*export_info_participant)
zipFile = ZipFile(in_memory, 'w')
rows = [headers_participant,headers]
result_row = []
result_row.append(rows)
for participant in queryset:
row1 = []
row2 = []
participants = Participant.objects.filter(id=participant.id)
trials = Trial.objects.filter(participant=participant.id)
for participant_value_list in participants.values_list(*fields_participant):
row1.append(unicode(v) for v in participant_value_list)
for trial_value_list in trials.values_list(*fields):
row2.append(unicode(v) for v in trial_value_list)
row = row1 + row2
result_row.append(row)
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
writer = csv.writer(response)
for row in result_row:
writer.writerow(row)
通过writerow ,您将在CSV的同一行中的result_row中获得一个列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.