Python使用逗号分隔符将.csv文件转换为字典

时间:2016-11-14 22:49:49

标签: python csv dictionary

所以我已经尝试解决这个问题已经有一段时间了,并做了一些研究,试图弄清楚为什么我的代码不会起作用,但我根本无法将字典打印出来正确的关键:我需要的价值对。

所以这就是故事。我正在读一个.csv文件,其中第一列是文本缩写,第二列是完整的英文含义。现在我尝试了多种方法尝试打开此文件,读取它,然后将其存储到我们创建的字典中。我的问题是文件被读取,当我打印分离的文件时(我相信它会遍历整个文件,但我不知道,因为它确实在第1007行被切断,但是经历了4600。问题在于,当我现在想要把所有东西都放到字典中的key:value对中时。唯一存储的就是文件中的第一行。

以下是代码:

detectNameConflict: function()
{
    var existing_filenames = this.element.find('ul.existing_files > li'); 
    if (existing_filenames.length > 0)
    {
        var try_name = this.element.find('div.target_filename').text().trim();
        try
        {
            existing_filenames.each(function(index, el)
                {
                    if ($(el).text() == try_name)
                    {
                        throw "contain_conflict";
                    }
                });
        }
        catch(e)
        {
            return e;
        }
    }
    return "no_conflict";
}

我认为问题是:

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

因为它是在循环中打印,但由于它在循环中,它应该只在每次经过一次又一次打印时打印。我对自己做错了很困惑。我试图使用的其他方法是json,但是我对如何使用它并不太了解,然后我也读了csv模块,但我不认为我们的教授希望我们使用它,所以我希望有人发现我的错误。在此先感谢!!!

修改

这是我程序的输出

    print dic

在文件结束之前会持续一段时间然后它会打印出我得到的整个字典

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/.'}

编辑2

以下是完整代码:

none

编辑3

这是我要在字典中创建的文件

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

2 个答案:

答案 0 :(得分: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循环遍历键和值。

答案 1 :(得分:0)

虽然所提供的其他解决方案没有任何问题,但您可以使用python的优秀图书馆熊猫简化并大大提升您的解决方案。

Pandas是一个用于处理Python数据的库,是许多数据科学家的首选。

Pandas有一个简化的CSV接口来读取和解析文件,可以用来返回一个字典列表,每个字典包含一行文件。键将是列名,值将是每个单元格中的值。

在你的情况下:

display