2015-06-18 3 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]) 

Я новичок в Python и я п ot действительно уверен, как использовать модуль cvs. Я подумывал создать массив и просто сопоставить цифры с месяцами. Так как price1 идет с date2, а price2 идет с датой1. Я только что подумал об этом? Я искал и, возможно, использовал дату и время, чтобы связать номер месяца с именем месяца. Любая помощь или руководство приветствуются! Еще раз спасибо!

Edit:

было бы трудно, если я хочу добавить некоторые цифры из столбца как

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# «s охватывают весь год вы можете изменить:

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

в

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

Почему я получаю эту ошибку: Traceback (самый последний вызов последнего): Файл "waterfall.py", строка 13, в m1 = месяцев [междунар (строка [ 'DATE1 '] .split ('/') [0])] KeyError:' Date1 ' – Captain4725

+0

nvm Я получил его еще раз! – Captain4725

1

Из того, что она выглядит, как вы хотите сделать сдвиг столбца. Это довольно сложно с некоторыми библиотеками, но одно из них должно быть весьма полезным.

Pandas Python

Смежные вопросы