私が書いたコードがあり、他の誰かが自分の名前を使用して入力し、コードが持つ他のことを行っているとします。
name = input('What is your name? ')
money = 5
#There is more stuff, but this is just an example.
その情報をテキスト ファイルに保存して、後で呼び出してそのセッションを続行するにはどうすればよいでしょうか。ビデオゲームのセーブポイントのようなもの。
私が書いたコードがあり、他の誰かが自分の名前を使用して入力し、コードが持つ他のことを行っているとします。
name = input('What is your name? ')
money = 5
#There is more stuff, but this is just an example.
その情報をテキスト ファイルに保存して、後で呼び出してそのセッションを続行するにはどうすればよいでしょうか。ビデオゲームのセーブポイントのようなもの。
@Justinのコメントに沿って、毎回セッションを保存して読み取る方法を次に示します。
import cPickle as pickle
def WriteProgress(filepath, progress):
with open(filepath, 'w') as logger:
pickle.dump(progress, logger)
logger.close()
def GetProgress(filepath):
with open(filepath, 'r') as logger:
progress = pickle.load(logger)
logger.close()
return progress
WriteProgress('SaveSessionFile', {'name':'Nigel', 'age': 20, 'school': 'school name'})
print GetProgress('SaveSessionFile')
{'age': 20, 'name': 'Nigel', 'school': 'school name'}
このようにして、ファイルを再度読み取るときに、以前に宣言したすべての変数を取得して、中断したところから開始することができます。
プログラムは pickle モジュールを使用してセッション情報の読み取りと書き込みを行うため、書き込み後にファイルを改ざんすると、予期しない結果が生じる可能性があることに注意してください。そのため、そのファイルへの書き込みと読み取りを行うのはプログラムだけであることに注意してください
必要な情報の保存と復元をより簡単にする一般化されたメカニズムを探しているかもしれません。これは、プログラミングの用語として永続性と呼ばれます。ただし、自動ではありません。それを実装するためのテクニックがあります。実装されたシステムがより複雑で具体的であるほど、メカニズムはより具体的になります。
単純なケースでは、データをファイルに明示的に格納するだけで十分です。Smac89 がhttps://stackoverflow.com/a/18309156/1346705で示したように、pickle
モジュールは Python オブジェクト全体のステータスを保存する標準的な方法です。ただし、必ずしも常に必要なものではありません。
更新:次のコードは原則を示しています。実際の使用のために拡張する必要があります (つまり、チュートリアルでのみ、この方法で使用しないでください)。
#!python3
fname = 'myfile.txt'
def saveInfo(fname, name, money):
with open(fname, 'w', encoding='utf-8') as f:
f.write('{}\n'.format(name))
f.write('{}\n'.format(money)) # automatically converted to string
def loadInfo(fname):
# WARNING: The code expect a fixed structure of the file.
#
# This is just for tutorial. It should never be done this way
# in production code.'''
with open(fname, 'r', encoding='utf-8') as f:
name = f.readline().rstrip() # rstrip() is an easy way to remove \n
money = int(f.readline()) # must be explicitly converted to int
return name, money
name = input('What is your name? ')
money = 5
print(name, money)
# Save it for future.
saveInfo(fname, name, money)
# Let's change it explicitly to see another content.
name = 'Nemo'
money = 100
print(name, money)
# Restore the original values.
name, money = loadInfo(fname)
print(name, money)