2015-05-18 51 views
0

我有一個CSV文件,我正在該文件中將某些字段(列)讀入字典(以便一列作爲鍵和其他作爲值)。更確切地說,我有數字格式的鍵和字符串格式的值。但我在這裏有一個問題。在CSV文件中,我有相同數字與多個字符串關聯的情況。所以當我試圖將我的字典打印到output.csv文件時,它確實按照我所希望的(key:value)格式打印它,但是它忽略了密鑰具有多個與其關聯的值的情況。從我觀察到的情況來看,只有與該關鍵字相關的最新值才被保留,舊值被覆蓋。當某些鍵具有多個值時,將字典打印到CSV文件

例如: 999測試1 999測試1 999的Test2 999 Test3的

在這種情況下,只有999:Test3的被打印在output.csv文件。我需要的是如果出現這種情況,它應該在output.csv文件上打印一條消息,如下所示。

999:有一個以上的測試

我怎樣才能實現呢?這是我迄今爲止編寫的代碼,用於輸出字典以輸出文件。但我需要一些幫助來結合上面的預期結果。

import csv 

infile = open('input.csv',"rb") 
reader = csv.reader(infile) 

outfile = open('output.csv',"wb") 
writer = csv.writer(outfile) 

mydict = dict((rows[18],rows[19]) for rows in reader) 
for key,value in mydict.items(): 
    writer.writerow([key,value]) 

infile.close() 
outfile.close() 

任何幫助表示讚賞。

謝謝!

+0

你是說在輸入文件,因爲你讀的列18和19,也可以是具有行第18列中的值與前一行相同? – mauve

+0

python中的字典有唯一的鍵,所以你不能將Test分配給一個鍵。但是,您可以將一個列表分配給一個鍵。所以你可以做999 [Test1,Test1,Test2,Test3]。 – aph107

+0

@mauve:是的,你說得對。我想識別這些行並相應地打印錯誤消息。 –

回答

0

只是保持對已經找到密鑰的標籤,並測試他們:

import csv 

infile = open('input.csv', "rb") 
reader = csv.reader(infile) 

outfile = open('output.csv', "wb") 
writer = csv.writer(outfile) 

found_keys = {} 
for rows in reader: 
    k, v = rows[18], rows[19] 
    if k in found_keys and found_keys[k] != v: 
     print("found duplicate key {} with different values {} , {}".format(k, v, found_keys[k])) 
    else: 
     found_keys[k] = v 
     writer.writerow([k, v]) 

infile.close() 
outfile.close() 
+0

如果我有這樣的鍵和值,該怎麼辦? 999 Test1 999 Test1 999 Test1在這種情況下,我不想打印錯誤消息。只有當一個密鑰有多個「唯一」值時,我才需要錯誤消息。 –

+0

@python_newbie:更新的答案 – RickyA

+0

謝謝@RickyA。我想我現在正處於正確的軌道上。我會從那裏拿走它。 –