2016-11-14 69 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'> 
相关问题