현재 파이썬 세션에서 모든 변수를 저장하는 방법은 무엇입니까?
현재의 파이썬 환경에서 모든 변수를 저장하고 싶습니다.한 가지 방법은 '피클' 모듈을 사용하는 것 같습니다.그러나 다음 두 가지 이유 때문에 이 작업을 수행하고 싶지 않습니다.
- 는 합화야니에 전화해야 합니다.
pickle.dump()
변수에 - 변수를 검색하려면 변수를 저장한 순서를 기억하고 다음을 수행해야 합니다.
pickle.load()
각 변수를 검색합니다.
이 저장된 세션을 로드할 때 모든 변수가 복원되도록 전체 세션을 저장할 명령을 찾고 있습니다.이것이 가능합니까?
편집: 전화해도 상관없을 것 같습니다.pickle.dump()
저장하고 싶은 각 변수에 대해, 그러나 변수가 저장된 정확한 순서를 기억하는 것은 큰 제한처럼 보입니다.저는 그것을 피하고 싶습니다.
선반을 사용하는 경우, 당신은 물건이 절이는 순서를 기억할 필요가 없습니다.shelve
사전과 유사한 개체를 제공합니다.
작업 보류하기
import shelve
T='Hiya'
val=[1,2,3]
filename='/tmp/shelve.out'
my_shelf = shelve.open(filename,'n') # 'n' for new
for key in dir():
try:
my_shelf[key] = globals()[key]
except TypeError:
#
# __builtins__, my_shelf, and imported modules can not be shelved.
#
print('ERROR shelving: {0}'.format(key))
my_shelf.close()
복원 방법:
my_shelf = shelve.open(filename)
for key in my_shelf:
globals()[key]=my_shelf[key]
my_shelf.close()
print(T)
# Hiya
print(val)
# [1, 2, 3]
여기 앉아서 저장하는 데 실패했습니다.globals()
사전으로서, 저는 당신이 딜 라이브러리를 사용하여 세션을 선택할 수 있다는 것을 발견했습니다.
이 작업은 다음을 사용하여 수행할 수 있습니다.
import dill #pip install dill --user
filename = 'globalsave.pkl'
dill.dump_session(filename)
# and to load the session again:
dill.load_session(filename)
당신의 요구를 충족시킬 수 있는 아주 쉬운 방법입니다.저는 꽤 잘 해냈습니다.
변수 탐색기(스파이더 오른쪽)에서 이 아이콘을 클릭하면 됩니다.
다음은 spyderlib 함수를 사용하여 Spyder 작업 공간 변수를 저장하는 방법입니다.
#%% Load data from .spydata file
from spyderlib.utils.iofuncs import load_dictionary
globals().update(load_dictionary(fpath)[0])
data = load_dictionary(fpath)
#%% Save data to .spydata file
from spyderlib.utils.iofuncs import save_dictionary
def variablesfilter(d):
from spyderlib.widgets.dicteditorutils import globalsfilter
from spyderlib.plugins.variableexplorer import VariableExplorer
from spyderlib.baseconfig import get_conf_path, get_supported_types
data = globals()
settings = VariableExplorer.get_settings()
get_supported_types()
data = globalsfilter(data,
check_all=True,
filters=tuple(get_supported_types()['picklable']),
exclude_private=settings['exclude_private'],
exclude_uppercase=settings['exclude_uppercase'],
exclude_capitalized=settings['exclude_capitalized'],
exclude_unsupported=settings['exclude_unsupported'],
excluded_names=settings['excluded_names']+['settings','In'])
return data
def saveglobals(filename):
data = globalsfiltered()
save_dictionary(data,filename)
#%%
savepath = 'test.spydata'
saveglobals(savepath)
그것이 당신에게 효과가 있다면 제게 알려주세요.데이비드 B-H
프로세스를 최대 절전 모드로 전환하려고 합니다.이것은 이미 논의되었습니다.결론은 그렇게 하려고 노력하는 동안 몇 가지 해결하기 어려운 문제들이 존재한다는 것입니다.열려 있는 파일 설명자를 복원하는 경우를 예로 들 수 있습니다.
프로그램의 직렬화/직렬화 하위 시스템을 고려하는 것이 좋습니다.많은 경우 사소한 것이 아니라 장기적인 관점에서 훨씬 더 나은 해결책입니다.
하지만 제가 문제를 과장했다면요.전역 변수 dict를 피클링할 수 있습니다.사전에 액세스하는 데 사용합니다.varname 인덱스이기 때문에 주문에 대해 신경 쓰지 않아도 됩니다.
승인된 답변을 추상화하려면 다음을 사용할 수 있습니다.
import shelve
def save_workspace(filename, names_of_spaces_to_save, dict_of_values_to_save):
'''
filename = location to save workspace.
names_of_spaces_to_save = use dir() from parent to save all variables in previous scope.
-dir() = return the list of names in the current local scope
dict_of_values_to_save = use globals() or locals() to save all variables.
-globals() = Return a dictionary representing the current global symbol table.
This is always the dictionary of the current module (inside a function or method,
this is the module where it is defined, not the module from which it is called).
-locals() = Update and return a dictionary representing the current local symbol table.
Free variables are returned by locals() when it is called in function blocks, but not in class blocks.
Example of globals and dir():
>>> x = 3 #note variable value and name bellow
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'x': 3, '__doc__': None, '__package__': None}
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'x']
'''
print 'save_workspace'
print 'C_hat_bests' in names_of_spaces_to_save
print dict_of_values_to_save
my_shelf = shelve.open(filename,'n') # 'n' for new
for key in names_of_spaces_to_save:
try:
my_shelf[key] = dict_of_values_to_save[key]
except TypeError:
#
# __builtins__, my_shelf, and imported modules can not be shelved.
#
#print('ERROR shelving: {0}'.format(key))
pass
my_shelf.close()
def load_workspace(filename, parent_globals):
'''
filename = location to load workspace.
parent_globals use globals() to load the workspace saved in filename to current scope.
'''
my_shelf = shelve.open(filename)
for key in my_shelf:
parent_globals[key]=my_shelf[key]
my_shelf.close()
an example script of using this:
import my_pkg as mp
x = 3
mp.save_workspace('a', dir(), globals())
작업영역 가져오기/로드하기
import my_pkg as mp
x=1
mp.load_workspace('a', globals())
print x #print 3 for me
제가 실행했을 때 효과가 있었습니다.이해할 수 없다는 것을 인정하겠습니다.dir()
그리고.globals()
100% 그래서 이상한 경고가 있을지 모르겠지만, 지금까지는 효과가 있는 것 같습니다.댓글은 환영합니다 :)
좀 더 조사한 후에 당신이 전화하면.save_workspace
글로벌과 함께 제안했듯이.save_workspace
기능 내에 있습니다. 로컬 범위에 검증 가능한 항목을 저장하려는 경우 예상대로 작동하지 않습니다.그 용도로locals()
이것은 글로벌이 함수가 정의된 모듈에서 글로벌을 가져오기 때문이지, 함수가 호출된 위치에서 글로벌을 가져오기 때문이라고 추측합니다.
텍스트 파일 또는 CVS 파일로 저장할 수 있습니다.사람들은 예를 들어 Spyder를 사용하여 변수를 저장하지만, 알려진 문제가 있습니다. 특정 데이터 유형의 경우 도로에서 가져오지 못합니다.
언급URL : https://stackoverflow.com/questions/2960864/how-to-save-all-the-variables-in-the-current-python-session
'programing' 카테고리의 다른 글
git AuthorDate가 CommitDate와 다른 이유는 무엇입니까? (0) | 2023.09.09 |
---|---|
MK맵 보기 줌 및 영역 (0) | 2023.09.09 |
Android Studio Run/Debug 구성 오류: 모듈이 지정되지 않았습니다. (0) | 2023.08.20 |
Spring Boot/Junit, 다중 프로파일에 대한 모든 장치 테스트 실행 (0) | 2023.08.20 |
클릭 시 Twitter Bootstrap Tooltip 콘텐츠 변경 (0) | 2023.08.20 |