[英]Not loading from pickled file
我在macOS Sierra上運行Python 3.5。 我有一個系統,其中將類的實例作為列表存儲在文件中(使用dill
),然后解開它們以執行操作,添加到它們,刪除它們等。問題是,當我設置localData
列表(加載的類的列表)到從文件加載的數據中,我無法與之交互。
這是我的代碼:
import dill as pickle
...
dataFileLocation = "./data.ehd"
localData = []
class eventClass:
def __init__(self, name, items, organisers):
self.name = name
self.items = items
self.organisers = organisers
loadData()
self.id = len(localData)
def loadData():
try:
dataFile = open(dataFileLocation, "rb")
localData = pickle.load(dataFile)
return localData
except (IOError, EOFError):
return False
def newEvent(name, items, organisers):
loadData()
localData.append(eventClass(name, items, organisers))
with open(dataFileLocation, "wb+") as dataFile:
pickle.dump(localData, dataFile)
...
def getInfo(name):
loadData()
for event in localData:
if event.name == name:
organisers = ""
for organiser in event.organisers:
organisers = (organisers + ", " + str(organiser))
items = ""
for item in event.items:
items = (items + ", " + str(item))
items = items[2:]
organisers = organisers[2:]
print("Name: " + str(event.name))
print("Internal ID: " + str(event.id))
print("Items: " + items)
print("Organisers: " + organisers)
def prompt():
task = input("EventHorizon >")
execute(task)
prompt()
def execute(task):
task = task.lower().split(" ")
if task[0] == ("newevent"):
name = task[1]
items = task[2].split(":")
organisers = task[3].split(":")
newEvent(name, items, organisers)
elif task[0] == ("dropevent"):
name = task[1]
dropEvent(name)
elif task[0] == ("getinfo"):
name = task[1]
getInfo(name)
elif task[0] == ("quit") or task[0] == ("exit"):
quit()
elif task[0] == ("loaddata"):
loadData()
loadData()
prompt()
這是我正在做的事情(從一個空白的data.ehd開始):
bash-3.2$ python3 main.py
EventHorizon >newEvent myEvent myItem myOrganiser
EventHorizon >newEvent myEvent2 myItem2 myOrganiser2
EventHorizon >getInfo myEvent
Name: myevent
Internal ID: 0
Items: myitem
Organisers: myorganiser
EventHorizon >getInfo myEvent2
Name: myevent2
Internal ID: 1
Items: myitem2
Organisers: myorganiser2
EventHorizon >exit
bash-3.2$ python3 main.py
EventHorizon >loadData
EventHorizon >getInfo myEvent
EventHorizon >getInfo myEvent2
沒有輸出顯示事件的屬性。 我還從一個確實包含數據的data.ehd
文件開始進行了測試(將其寫入可以正常工作)。
為什么會這樣呢? 任何幫助將不勝感激。 謝謝!
感謝@ juanpa.arrivillaga,此問題已解決!
問題在於loadData
中的localData
變量僅是本地的,因此主代碼中的localData
未被更新。
通過在開始時修改loadData
來將localData
定義為global來解決此問題。 修改后的loadData
為:
def loadData():
global localData
try:
dataFile = open(dataFileLocation, "rb")
localData = pickle.load(dataFile)
except (IOError, EOFError):
return False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.