编写csv输出python

时间:2015-06-18 01:02:34

标签: python csv

我需要一个看起来像这样的csv文件......

Name,Price1,Price2,Date1,Date2
ABC,1000,7500,5/1,6/1
DEF,3000,500,5/1,7/1
GHI,5000,3500,6/1,8/1

并将其写入另一个csv文件,使其看起来像这样......

Name,May,June,July,August 
ABC,7500,1000, , 
DEF,500, ,3000
GHI, ,3500, ,5000

空格被认为是空白的,因为没有任何内容,这是我到目前为止的代码

 import csv 

with open('test-data.csv','rb') as f: 
    csv_file=csv.reader(f) 
    data=[row for row in csv_file]

    with open('csv-out.csv', 'wb') as out: 
        writer=csv.writer(out) 
        writer.writerow(['Name','May','June','July','August']) 
        for row in data: 
            writer.writerow(row[0]) 

我是python的新手,我不确定如何使用cvs模块。我正在考虑制作一个阵列,并将数字与数月相匹配。由于price1与date2相同而price2与date1相同。我只是在想这个吗?我正在四处搜索,也可能使用datetime将月份号码连接到月份名称。感谢任何帮助或指导!再次感谢!

编辑:

如果我还要添加像

这样的列中的某些数字,那会难吗?
Name,May,June,July,August 
ABC,7500,1000, , 
DEF,500, ,3000
GHI, ,3500, ,5000    
Total,8000,4500,3000,5000

2 个答案:

答案 0 :(得分:2)

这样的事情应该适合你的问题:

import csv
import calendar
from collections import defaultdict

months = [calendar.month_name[i] for i in range(0, 13)]
totals = defaultdict(int)

with open("data.csv", "r") as inf, open("data-out.csv", "w") as ouf:
    reader = csv.DictReader(inf)
    writer = csv.DictWriter(ouf, ['Name'] + months[5:9])
    writer.writeheader()
    for row in reader:
        m1 = months[int(row['Date1'].split('/')[0])]
        p2 = int(row['Price2'])
        totals[m1] += p2

        m2 = months[int(row['Date2'].split('/')[0])]
        p1 = int(row['Price1'])
        totals[m2] += p1

        writer.writerow({'Name': row['Name'], m1: p2, m2: p1})

    totals['Name'] = 'Total'
    writer.writerow(totals)
with open("data-out.csv", "r") as f:
    print(f.read())

Name,May,June,July,August
ABC,7500,1000,,
DEF,500,,3000,
GHI,,3500,,5000
Total,8000,4500,3000,5000

如果Date#跨越整年,您可以更改:

writer = csv.DictWriter(ouf, ['Name'] + months[5:9])

writer = csv.DictWriter(ouf, ['Name'] + months[1:])

答案 1 :(得分:1)

从您想要进行列移动看起来如此。对于某些图书馆而言,这实际上非常困难,但下面的图书应该非常有用。

Pandas Python