簡體   English   中英

使用python在csv中一行編寫多個字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM