我有一个.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文件中的信息再次创建字典。 希望这会有所帮助。
答案 0 :(得分:0)
是的,您打开.dat
文件,将数据(使用pickle.load
方法)导入变量。您还需要将import
类Nation
类导入新程序,否则会出错。
编辑:
您可以保存对象,一次调用每个对象的pickle.dump
方法,然后一次加载一个。 pickle
将为您处理类型。但是如果你正在加载一个你自己的类型(用class
定义),那么该类的源代码必须是可用的,因此如果没有错误,则需要将这些类导入到加载脚本。
请参阅此处的简单示例和说明: https://wiki.python.org/moin/UsingPickle