2016-11-14 72 views
0

所以我試圖解決這個問題很長一段時間了,並試圖找出爲什麼我的代碼將無法工作,但我根本無法得到字典用所有正確的鍵值打印:我需要的值對。Python使用逗號分隔符將.csv文件轉換爲字典

這就是故事。我正在閱讀一個.csv文件,其中第一列是文本縮寫,第二列是全文的含義。現在我嘗試了多種嘗試打開該文件的方法,閱讀它,然後將其存儲到我們創建的字典中。我的問題是文件被讀取,當我打印分離的部分(我相信它貫穿整個文件,但我不知道,因爲它確實在1007行左右被切斷,但是到達4600.問題是,當我現在要採取所有的東西,並把它變成鍵:值對的字典裏是被存儲在文件中的第一行唯一的一個

下面是代碼:

def createDictionary(filename): 
    f = open(filename, 'r') 
    dic = {} 
    for line in f: 
     #line = line.strip() 
     data = line.split(',') 
     print data 
     dic[data[0]] = data[1] 
     print dic 

我認爲是問題是:

print dic 

既然是印刷在循環內部,但是由於它在循環中,所以每次它一次又一次地打印時應該打印。我很困惑我做錯了什麼。我嘗試使用的其他方法是json,但我不太瞭解如何使用它,然後我也閱讀了csv模塊,但我認爲我們的教授不希望我們使用它,所以我希望有人發現我的錯誤。提前致謝!!!

編輯

這是我的計劃

going to be late\rg2cu', 'glad to see you\rg2e', 'got to eat\rg2g', 'got to go\rg2g2tb', 'got to go to the bathroom\rg2g2w', 'got to go to work\rg2g4aw', 'got to go for a while\rg2gb', 'got to go bye\rg2gb2wn', 'got to go back to work now\rg2ge', 'got to go eat\rg2gn', 'got to go now\rg2gp', 'got to go pee\rg2gpc', 'got 2 go parents coming\rg2gpp', 'got to go pee pee\rg2gs', 'got to go sorry\rg2k', 'good to know\rg2p', 'got to pee\rg2t2s', 'got to talk to someone\rg4u', 'good for you\rg4y', 'good for you\rg8', 'gate\rg9', 'good night\rga', 'go ahead\rgaalma', 'go away and leave me alone\rgafi', 'get away from it\rgafm', 'Get away from me\rgagp', 'go and get pissed\rgaj' 

的輸出,它應該打印整個字典之後,正好爲一點,直到文件的末尾,然後在其中我得到這個

{'$$': 'money\r/.'} 

連同

none 

EDIT 2

下面是完整的代碼:

def createDictionary(filename): 
    f = open(filename, 'r') 
    dic = {} 
    for line in f: 
     line = line.strip() 
     data = line.split(',') 
     print data 
     dic[data[0]] = data[1] 
     print dic 

if __name__ == "__main__": 
    x = createDictionary("textToEnglish.csv") 
    print x 

編輯3

這裏是我努力使之成爲一本字典

文件https://1drv.ms/u/s!AqnudQBXpxTGiC9vQEopu1dOciIS

+2

你能告訴我們一點,它的輸出呢? –

+0

您是指當我運行程序時從終端上看到的內容?如果是這樣,我仍然是這個網站的新手,除了截圖以外不知道如何顯示它? –

+0

*我相信它貫穿整個文件,但我不知道,因爲它確實在1007行左右被截斷,但是會到達4600. *唉,相信不是編程的一部分,因爲我們沒有魔法工作 - 你的代碼能處理較小的文件,可能少於1000行?代碼究竟如何中斷? –

回答

1

只需在您的功能中添加return即可。此外,由於csv第一列中的重複值,您將看到字典長度與csv行不同。字典鍵必須是唯一的,所以當一個重用的鍵被分配給一個值時,後一個值將替換前一個值。

def createDictionary(filename): 
    f = open(filename, 'r') 
    dic = {} 
    for line in f: 
     #line = line.strip() 
     data = line.split(',') 
     print(data) 
     dic[data[0]] = data[1] 
    return dic 

if __name__ == "__main__": 
    x = createDictionary("textToEnglish.csv") 
    print type(x) 
    # <class 'dict'> 

    print len(x) 
    # 4255 

for k, v in x.items(): 
    print(k, v) 

而且儘量不要print字典一下子特別是成爲記憶激烈開銷這麼多的價值。瞭解如何使用for循環遍歷鍵和值。

0

儘管其他解決方案沒有出現問題,但您可以通過使用python優秀的圖書館熊貓來簡化和大幅提升解決方案。

Pandas是一個用於處理Python中數據的庫,許多數據科學家都喜歡它。

Pandas有一個簡化的CSV接口來讀取和解析文件,可以用來返回一個字典列表,每個字典包含一行文件。鍵將是列名稱,並且值將是每個單元格中的值。

你的情況:

import pandas 

    def createDictionary(filename): 
     my_data = pandas.DataFrame.from_csv(filename, sep=',', index_col=False) 
     list_of_dicts = [item for item in my_data.T.to_dict().values()] 
     return list_of_dicts 

    if __name__ == "__main__": 
     x = createDictionary("textToEnglish.csv") 
     print type(x) 
     # <class 'list'> 
     print len(x) 
     # 4255 
     print type(x[0]) 
     # <class 'dict'> 
相關問題