programing

파이썬에서 여러 변수를 저장하고 복원하려면 어떻게 해야 합니까?

stoneblock 2023. 8. 2. 08:40

파이썬에서 여러 변수를 저장하고 복원하려면 어떻게 해야 합니까?

한 파일에 약 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