从.dat文件

时间:2017-11-26 17:50:13

标签: python file dictionary

我有一个.txt文件,其中包含国家/地区列表以及以逗号分隔的国家/地区信息。我的问题是使用该文件创建一个字典,然后将该字典保存到pickled .dat文件,最后导入该字典,以便用户可以搜索国家/地区名称并打印信息。

我想我创建了字典并将其正确保存到dat文件中,我无法导入字典并进行搜索。 这是我创建和保存字典的代码:

    natDict = {}
with open("UN.txt","r") as filestream:
    for line in filestream:
        currentLine = line.split(",")
        newC = Nation(currentLine[0],currentLine[1],float(currentLine[2]),float(currentLine[3])) #creats new Nation object
        natDict[currentLine[0]] = newC

with open('nationsDict.dat', 'wb') as handle:
    pickle.dump(natDict, handle, protocol=pickle.HIGHEST_PROTOCOL)

现在我必须创建一个使用nationsDict.dat文件的新程序,以便用户可以搜索国家/地区。我没有任何关于腌制数据文件的经验,而我的老师的讲座幻灯片也没有对它们说些什么。我猜我必须导入dat文件,然后再将它作为字典,以便用户可以搜索它,我只是不知道我该怎么做。

//编辑 对不起,这个问题有点不清楚,我会尝试提供更多信息。 我为每个Nation创建了一个对象,这样字典就像{CountryName:CountryObject}。

class Nation:
def __init__(self, name, cont, pop, area):
    self.name = name
    self.cont = cont
    self.pop = pop
    self.area = area
    self.popDens = self.calcPopDensity(pop,area)

def calcPopDensity(self,pop,area):
    return((pop * 1000000) / area)

def __str__(self):
    return (self.name + ":\ncontinent: " + self.cont + "\npopulation: " + str(self.pop) +
            " million \narea: " + str(self.area) + "\nPopulation Density : " + str(self.popDens))

UN.txt文件的设置如下:
阿富汗,亚洲,31.8,251772
阿尔巴尼亚,欧洲,3.0,11100
阿尔及利亚,非洲,38.3,919595
安道尔,欧洲,.085,181
安哥拉,非洲,19.1,481354

联合国所有国家都在档案中。

我真正需要知道的是如何使用nationsDict.dat文件来搜索项目。我在其中放了一本字典,所以我可以将其导入并使用它,就像它仍然是字典一样吗?或者我是否必须使用.data文件中的信息再次创建字典。 希望这会有所帮助。

1 个答案:

答案 0 :(得分:0)

是的,您打开.dat文件,将数据(使用pickle.load方法)导入变量。您还需要将importNation类导入新程序,否则会出错。

编辑: 您可以保存对象,一次调用每个对象的pickle.dump方法,然后一次加载一个。 pickle将为您处理类型。但是如果你正在加载一个你自己的类型(用class定义),那么该类的源代码必须是可用的,因此如果没有错误,则需要将这些类导入到加载脚本。

请参阅此处的简单示例和说明: https://wiki.python.org/moin/UsingPickle