2015-06-18 16 views
5

muszę wziąć pliku csv, który wygląda tak ...pisanie wyjście csv python

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 

i napisać go do innego pliku csv, aby wyglądał jak ten ...

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

przestrzenie są przypuszczać, aby być puste, ponieważ nic nie idzie tam i jest to kod, który mam tak daleko

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]) 

Jestem nowym python i jestem n naprawdę nie wiem, jak korzystać z modułu cvs. Myślałem o zrobieniu tablicy i dopasowaniu liczb do miesięcy. Ponieważ cena1 idzie z datą2, a cena2 z datą1. Czy po prostu nad tym się zastanawiam? Szukałem w pobliżu i być może używam datetime również do połączenia numeru miesiąca z nazwą miesiąca. Każda pomoc lub wskazówki są mile widziane! Jeszcze raz dziękuję!

Edit:

trudno byłoby jeśli chcę również dodać kilka liczb z kolumny jak

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

Odpowiedz

2

Coś jak to powinno działać na swoje pytanie:

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 

Jeśli Date# „s obejmowały cały rok można zmienić:

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

do

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

Dlaczego mam ten błąd: Traceback (najnowsza rozmowę ostatni): Plik "waterfall.py", linia 13, w m1 = miesięcy [int (row [ 'date1 '] .split ('/') [0])] KeyError:' Date1 ' – Captain4725

+0

nvm Mam to jeszcze raz dzięki! – Captain4725

1

Z tego, co wygląda jak chcesz zrobić przesunięcie kolumny. W niektórych bibliotekach jest to dość trudne, ale ten poniżej powinien być całkiem pomocny.

Pandas Python