Python求和并组织CSV数据

时间:2018-11-18 18:11:48

标签: python excel python-3.x csv

该程序几乎从“数据”文件中获取数据,对其进行分析(负数-> 0),然后将所有内容保存到新文件中。

ReportService/RunSavedQuery.php

我想每天将所有值添加到一行,所以就像:

import csv
from collections import defaultdict

def convert(item): 
    try:
        item = float(item)
        if item < 0:
            return 0
        else:
            return item
    except ValueError:
        return item

sums = defaultdict(list)

with open('Data.csv', 'r') as inp, open('output1.csv', 'w', newline = '') as outp:
    reader = csv.reader(inp, delimiter = ';')
    writer = csv.writer(outp, delimiter = ';', dialect = 'excel')
    headers = next(reader)
    for line in reader: 
        line = [convert(i) for i in line]
        sums[line[1]+line[2]+line[3]+line[4]+line[5]+line[6]+line[7]+line[8]
             ].append(line[1])
        writer.writerow(line)

for k,v in sums.items():
    print(line[0], '{} total: {}'.format(k,sum(v)))

...等到新的(或现有的输出)文件。 (因此,在将负数分析并将其修改为0后将数字相加) 可以直接完成,还是应该先使用列表保存值?
我不能最后添加“ line [0]”,它不能正确打印日期,只可以打印最后一个日期。
可以下载数据文件:https://files.fm/u/yuf4bbuk
数据的前10行https://pastebin.com/9HxwcixZ
从url / 53355207继续

1 个答案:

答案 0 :(得分:2)

您不远了,但是应该代替package.json,而应使用子字符串提取日期,从而根据第一列—host 0.0.0.0计算密钥:

sums[line[1]+line[2]+line[3]+line[4]+line[5]+line[6]+line[7]+line[8]].append(line[1])

给予

line[0]

您也可以预先计算总和而不是添加到列表中,还可以打印累积值:

with open('solarData.csv', 'r') as inp, open('output.csv', 'w', newline = '') as outp:
    reader = csv.reader(inp, delimiter = ';')
    headers = next(reader)
    for line in reader: 
        line = [convert(i) for i in line]
        sums[line[0][:10]].append(line[1]+line[2]+line[3]+line[4]+line[5]+line[6]+line[7]+line[8])

    writer = csv.writer(outp, delimiter = ';', dialect = 'excel')
    for k, v in sums.items():
        print('{} : {}'.format(k, sum(v)))
        writer.writerow([k, sum(v)])