2013-04-02 81 views
-4

我有一個CSV名爲temp.csv其中3列CSV文件寫入和讀出使用python

Name Iteration  Value //this temp.csv file 
module1 1    10 
module2 2    20 
module3 3    30 
module4 4    40 
module1 5    50 
module2 6    60 
module3 7    70 
module4 8    80 
module1 9    90 

現在我想一個名爲accumuated.csv像

Name Iteration  Value 
module1 1,5,9  150 i.e. 10+50+90 
module2 2,6   80 i.e. 20+60 
modul13 3,7   100 i.e. 30+70 
module4 4,8   120 i.e. 40+80 
+5

「你嘗試過什麼」的評論現在禁止。但是,你知道,你有什麼嘗試? –

+0

@DanielRoseman鏈接? – jamylak

+0

@jamylak http://meta.stackexchange.com/questions/172758/what-have-you-tried-epidemic/172760#172760 –

回答

2

你應該保持一個新的CSV以「Name」爲關鍵字的字典。該值可以是具有「迭代」和「值」的列表。

遍歷輸入的csv文件並根據「名稱」更新字典。

示例代碼:

with open("111.csv") as f: 
    lines = f.readlines() 
    print lines 

data = {} 

for line in lines[1:]: 
    print line 
    name, iteration, value = line.split() 
    print line 
    if name not in data: 
     data[name] = [[], 0] 

    data[name][0].append(iteration) 
    data[name][1] += int(value) 

print data 

現在其寫回到輸出文件。

0

我建議使用字典,名稱爲鍵和列表,包括兩個迭代(作爲一個子列表)和款項值,例如:

d = {} 
with open("orig.csv") as f: 
    lines = [f.split(',') for f in f.readlines()[1:] 
for line in lines: 
    if line[0] not in d: 
     d[line[0]] = [0,[]] 
    d[line[0]][1].append(line[1]) 
    d[line[0]][0] += line[2] 
with open("new.csv",'w') as f: 
    f.write("Name,Iteration,Value") 
    for mod in d: 
     f.write(mod+',"'+','.join(d[mod][1])+'",'+d[mod][0]+'\n') 
+0

嗨,它可以工作,但倒過來像模塊4先插入然後模塊3,模塊2和模塊1。我怎麼能扭轉這一點。 –

+0

詞典是未分類的,所以你甚至不能可靠地指望順序倒退。在排序後的(d.keys())'嘗試'mod。 –

+0

ya。它的工作。謝謝 :)。 –