根据标题名称将数据写入csv,标题名称指示项目的出现

2024-06-12 16:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要输入数据到csv使用标题,并把一个值,如果该标志是在事件中可用,否则归零它。所需输出为:

required image我现在得到:

getting image

这是我目前的代码,我想知道如何生成我想要的输出:

代码输入为计数器1-4,如下所示:

OrderedDict([('flags=40', 3971), ('flags=10004', 6244), ('flags=10100', 236), ('flags=90002', 2), ('flags=80', 2009), ('flags=10080', 5421), ('flags=4', 2886), ('flags=100', 227), ('flags=80002', 58), ('flags=10040', 8990), ('flags=0', 5)])

OrderedDict([('flags=40', 16), ('flags=10004', 6244), ('flags=10100', 236), ('flags=90002', 2), ('flags=10080', 5421), ('flags=4', 16), ('flags=80002', 11), ('flags=10040', 8990), ('flags=0', 4), ('Total', 20940)])
OrderedDict([('flags=4', 1332), ('flags=40', 1839), ('flags=80002', 3), ('flags=100', 197), ('flags=80', 935), ('Total', 4306)])
OrderedDict([('Total', 0)])
OrderedDict([('flags=40', 2116), ('flags=80', 1074), ('flags=4', 1538), ('flags=100', 30), ('flags=80002', 44), ('flags=0', 1), ('Total', 4803)])

dat = 1        
with open(outputcsv,'wb') as outcsv:
    writer = csv.writer(outcsv,delimiter=',')
    appname = inputfile[:-3]
    writer.writerow(appname.split(','))
    for x in threads:
        writer.writerows([x.split(',')])
        #w.writeheader([x.split(',')])
        if dat == 1:
            w = csv.DictWriter(outcsv,counter1.keys())
            w.writeheader()
            w.writerow(counter1)
        elif dat == 2:
            w = csv.DictWriter(outcsv,counter2.keys())
            w.writeheader()
            w.writerow(counter2)
        elif dat == 3:
            w = csv.DictWriter(outcsv,counter3.keys())
            w.writeheader()
            w.writerow(counter3)
        elif dat == 4:
            w = csv.DictWriter(outcsv,counter4.keys())
            w.writeheader()
            w.writerow(counter4)
        dat = dat +1    
        writer.writerows('\n')

如何读取线程的代码:

 exampleFile = open('top_tasks.csv')
exampleReader = csv.reader(exampleFile)
exampleData = list(exampleReader)
thread1 = exampleData[11][0]
thread2 = exampleData[12][0]
thread3 = exampleData[13][0]
thread4 = exampleData[14][0]
threads = [thread1,thread2,thread3,thread4]

Tags: csv代码keysdatwritertotalflagsordereddict
1条回答
网友
1楼 · 发布于 2024-06-12 16:34:13

我认为这个代码符合你的要求:

from collections import OrderedDict
import csv

# build an OrderedDict of all keys
all_keys = OrderedDict()

# first column gets name of data set
all_keys[data_set_name] = data_set_name

# collect all of the known keys, and insert the thread name
for counter, thread in zip(counters, threads):
    all_keys.update(counter)
    counter[data_set_name] = thread

with open(outputcsv, 'wb') as outcsv:
    # using all known keys, create a csv writer
    w = csv.DictWriter(outcsv, fieldnames=all_keys.keys())

    # output the header and data rows
    w.writeheader()
    w.writerows(counters)

使用的数据:

outputcsv = 'output.csv'
counters = [
    OrderedDict(
        [('flags=40', 3971), ('flags=10004', 6244), ('flags=10100', 236),
         ('flags=90002', 2), ('flags=80', 2009), ('flags=10080', 5421),
         ('flags=4', 2886), ('flags=100', 227), ('flags=80002', 58),
         ('flags=10040', 8990), ('flags=0', 5)]),

    OrderedDict(
        [('flags=40', 16), ('flags=10004', 6244), ('flags=10100', 236),
         ('flags=90002', 2), ('flags=10080', 5421), ('flags=4', 16),
         ('flags=80002', 11), ('flags=10040', 8990), ('flags=0', 4),
         ('Total', 20940)]),
    OrderedDict([('flags=4', 1332), ('flags=40', 1839), ('flags=80002', 3),
                 ('flags=100', 197), ('flags=80', 935), ('Total', 4306)]),
    OrderedDict([('Total', 0)]),
    OrderedDict([('flags=40', 2116), ('flags=80', 1074), ('flags=4', 1538),
                 ('flags=100', 30), ('flags=80002', 44), ('flags=0', 1),
                 ('Total', 4803)]),
]

# code assumes thread names are in a list, make some sample names
threads = ['thread%d' % (i+1) for i in range(len(counters))]

# first column header if the name of the data set
data_set_name = 'CandyCrush 1'

相关问题 更多 >