2015-06-18 142 views
5

我需要一个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]) 

我是新来的蟒蛇,我ñ不确定如何使用CVS模块。我正在考虑制作一个数组,并将这些数字匹配到几个月。由于price1与date2一起使用,price2与date1一起使用。我只是在想这个吗?我正在四处搜寻,也可能使用日期时间将月份号码连接到月份名称。任何帮助或指导表示赞赏!再次感谢!

编辑:

难道是很难,如果我想也是从一列类似

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

回答

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:]) 
+0

为什么我得到这个错误:回溯(最近通话最后一个): 文件 “waterfall.py”,13号线,在 M1 =月[INT(行['日期1 '] .split('/')[0])] KeyError:'Date1' – Captain4725

+0

nvm我再次感谢它! – Captain4725

1

添加一些数字从什么样子,你想要做一个列移位。对于一些图书馆来说这实际上很难,但是下面的图书馆应该是相当有帮助的。

Pandas Python