파이썬에서 여러 변수를 저장하고 복원하려면 어떻게 해야 합니까?
한 파일에 약 12개의 개체를 저장한 다음 나중에 복원해야 합니다.저는 피클과 선반이 있는 포 루프를 사용하려고 했지만 제대로 작동하지 않았습니다.
편집.
제가 저장하려고 했던 모든 개체가 같은 클래스에 있었고(이전에 이를 언급했어야 했는데), 이렇게 전체 클래스를 저장할 수 있는지 몰랐습니다.
import pickle
def saveLoad(opt):
global calc
if opt == "save":
f = file(filename, 'wb')
pickle.dump(calc, f, 2)
f.close
print 'data saved'
elif opt == "load":
f = file(filename, 'rb')
calc = pickle.load(f)
else:
print 'Invalid saveLoad option'
여러 개체를 저장해야 하는 경우 다음과 같이 하나의 목록 또는 튜플에 개체를 저장할 수 있습니다.
import pickle
# obj0, obj1, obj2 are created here...
# Saving the objects:
with open('objs.pkl', 'w') as f: # Python 3: open(..., 'wb')
pickle.dump([obj0, obj1, obj2], f)
# Getting back the objects:
with open('objs.pkl') as f: # Python 3: open(..., 'rb')
obj0, obj1, obj2 = pickle.load(f)
데이터가 많은 경우 전달하여 파일 크기를 줄일 수 있습니다.protocol=-1
로.dump()
;pickle
그러면 기본 과거(및 이전 버전과의 호환성이 더 높은) 프로토콜 대신 사용 가능한 최상의 프로토콜을 사용합니다.이 경우 파일을 이진 모드로 열어야 합니다.wb
그리고.rb
각각)
기본 프로토콜이 이진(즉, 텍스트가 아닌) 데이터(쓰기 모드)를 생성하므로 이진 모드도 Python 3과 함께 사용해야 합니다.'wb'
및 읽기 모드'rb'
).
라고 하는 내장 라이브러리가 있습니다. 를 사용하면 객체를 파일에 덤프하고 나중에 로드할 수 있습니다.
import pickle
f = open('store.pckl', 'wb')
pickle.dump(obj, f)
f.close()
f = open('store.pckl', 'rb')
obj = pickle.load(f)
f.close()
선반과 피클 모듈을 살펴봐야 합니다.많은 데이터를 저장해야 하는 경우 데이터베이스를 사용하는 것이 좋습니다.
피클 파일에 여러 변수를 저장하는 또 다른 방법은 다음과 같습니다.
import pickle
a = 3; b = [11,223,435];
pickle.dump([a,b], open("trial.p", "wb"))
c,d = pickle.load(open("trial.p","rb"))
print(c,d) ## To verify
다음 접근 방식은 단순해 보이며 크기가 다른 변수와 함께 사용할 수 있습니다.
import hickle as hkl
# write variables to filename [a,b,c can be of any size]
hkl.dump([a,b,c], filename)
# load variables from filename
a,b,c = hkl.load(filename)
사용할 수 있습니다.klepto
메모리, 디스크 또는 데이터베이스에 영구 캐싱을 제공합니다.
dude@hilbert>$ python
Python 2.7.6 (default, Nov 12 2013, 13:26:39)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from klepto.archives import file_archive
>>> db = file_archive('foo.txt')
>>> db['1'] = 1
>>> db['max'] = max
>>> squared = lambda x: x**2
>>> db['squared'] = squared
>>> def add(x,y):
... return x+y
...
>>> db['add'] = add
>>> class Foo(object):
... y = 1
... def bar(self, x):
... return self.y + x
...
>>> db['Foo'] = Foo
>>> f = Foo()
>>> db['f'] = f
>>> db.dump()
>>>
그런 다음 인터프리터를 다시 시작한 후...
dude@hilbert>$ python
Python 2.7.6 (default, Nov 12 2013, 13:26:39)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from klepto.archives import file_archive
>>> db = file_archive('foo.txt')
>>> db
file_archive('foo.txt', {}, cached=True)
>>> db.load()
>>> db
file_archive('foo.txt', {'1': 1, 'add': <function add at 0x10610a0c8>, 'f': <__main__.Foo object at 0x10510ced0>, 'max': <built-in function max>, 'Foo': <class '__main__.Foo'>, 'squared': <function <lambda> at 0x10610a1b8>}, cached=True)
>>> db['add'](2,3)
5
>>> db['squared'](3)
9
>>> db['f'].bar(4)
5
>>>
여기에서 코드를 확인하십시오. https://github.com/uqfoundation
dill(https://dill.readthedocs.io/en/latest/dill.html) 패키지를 이용한 솔루션입니다.피클도 비슷하게 작동해야 합니다.
""" Some objects to save """
import numpy as np
a = 6
b = 3.5
c = np.linspace(2,5,11)
""" Test the dump part """
import dill
file_name = 'dill_dump_test_file.dil'
list_of_variable_names = ('a', 'b', 'c')
with open(file_name,'wb') as file:
dill.dump(list_of_variable_names, file) # Store all the names first
for variable_name in list_of_variable_names:
dill.dump(eval(variable_name), file) # Store the objects themselves
# Clear all the variables here
""" Test the load part """
import dill
file_name = 'dill_dump_test_file.dil'
g = globals()
with open(file_name,'rb') as file:
list_of_variable_names = dill.load(file) # Get the names of stored objects
for variable_name in list_of_variable_names:
g[variable_name] = dill.load(file) # Get the objects themselves
언급URL : https://stackoverflow.com/questions/6568007/how-do-i-save-and-restore-multiple-variables-in-python
'programing' 카테고리의 다른 글
Python 시간 측정 함수 (0) | 2023.08.02 |
---|---|
PHP에서 SQL Server에 연결하는 동안 "Adaptive Server를 사용할 수 없거나 존재하지 않습니다" 오류가 발생했습니다. (0) | 2023.08.02 |
실행 중인 도커 컨테이너에서 환경 변수를 설정하는 방법 (0) | 2023.08.02 |
3D 어레이는 C에 어떻게 저장됩니까? (0) | 2023.08.02 |
PHP7-MariaDB 데이터 양식 삽입 (0) | 2023.08.02 |