dict(또는 다른 Python 객체)를 저장하려면 어떻게 피클을 사용해야 합니까?
Python docs가 제공하는 정보를 확인했지만, 아직 조금 혼란스럽습니다.새 파일을 작성한 다음 피클을 사용하여 사전을 버리는 샘플 코드를 게시할 수 있습니까?
이것을 시험해 보세요.
import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle, protocol=pickle.HIGHEST_PROTOCOL)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
print(a == b)
상기의 솔루션에는, 특정의 것은 없습니다.dict물건.이 접근법은 임의 클래스의 인스턴스 및 데이터 구조의 임의 복잡한 중첩을 포함한 많은 Python 개체에 적용됩니다.예를 들어, 두 번째 행을 다음 행으로 바꿉니다.
import datetime
today = datetime.datetime.now()
a = [{'hello': 'world'}, 1, 2.3333, 4, True, "x",
("y", [[["z"], "y"], "x"]), {'today', today}]
결과를 낳다True뿐만 아니라.
어떤 물건들은 그 성질상 절일 수 없다.예를 들어 열린 파일에 핸들을 포함하는 구조를 피클하는 것은 의미가 없습니다.
import pickle
your_data = {'foo': 'bar'}
# Store data (serialize)
with open('filename.pickle', 'wb') as handle:
pickle.dump(your_data, handle, protocol=pickle.HIGHEST_PROTOCOL)
# Load data (deserialize)
with open('filename.pickle', 'rb') as handle:
unserialized_data = pickle.load(handle)
print(your_data == unserialized_data)
장점HIGHEST_PROTOCOL파일이 작아지는 것입니다.이 때문에, 경우에 따라서는 주름 제거 속도가 훨씬 빨라집니다.
중요사항:피클의 최대 파일 크기는 약 2GB입니다.
대체 방법
import mpu
your_data = {'foo': 'bar'}
mpu.io.write('filename.pickle', data)
unserialized_data = mpu.io.read('filename.pickle')
대체 형식
- CSV: 매우 심플한 포맷(읽기와 쓰기)
- JSON: 사람이 읽을 수 있는 데이터 쓰기에 최적. 매우 일반적으로 사용(읽기 및 쓰기)
- YAML: YAML은 JSON의 슈퍼셋이지만 읽기 쉬움(읽기 및 쓰기, JSON과 YAML의 비교)
- 피클: Python 시리얼라이제이션 포맷(읽기 & 쓰기)
- MessagePack(Python 패키지):보다 콤팩트한 표시(읽기 및 쓰기)
- HDF5(Python 패키지):매트릭스(읽기 및 쓰기)에 최적
- XML: 너무 *sigh* (읽고 쓰기)
사용하시는 어플리케이션에서는 다음 사항이 중요할 수 있습니다.
- 다른 프로그래밍 언어 지원
- 읽기/쓰기 성능
- 콤팩트성(파일 크기)
다음 항목도 참조하십시오.데이터 시리얼화 포맷 비교
컨피규레이션파일을 만드는 방법을 찾고 있는 경우, 저의 짧은 기사 Configuration files in Python을 읽어보시기 바랍니다.
# Save a dictionary into a pickle file.
import pickle
favorite_color = {"lion": "yellow", "kitty": "red"} # create a dictionary
pickle.dump(favorite_color, open("save.p", "wb")) # save it into a file named save.p
# -------------------------------------------------------------
# Load the dictionary back from the pickle file.
import pickle
favorite_color = pickle.load(open("save.p", "rb"))
# favorite_color is now {"lion": "yellow", "kitty": "red"}
일반적으로 산세척은dict문자열이나 정수 등의 단순한 객체만 없는 한 실패합니다.
Python 2.7.9 (default, Dec 11 2014, 01:21:43)
[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 numpy import *
>>> type(globals())
<type 'dict'>
>>> import pickle
>>> pik = pickle.dumps(globals())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
Pickler(file, protocol).dump(obj)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 663, in _batch_setitems
save(v)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 306, in save
rv = reduce(self.proto)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle module objects
>>>
아주 간단한 것조차dict실패하는 경우가 많습니다.그냥 내용에 따라 다르죠.
>>> d = {'x': lambda x:x}
>>> pik = pickle.dumps(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
Pickler(file, protocol).dump(obj)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 663, in _batch_setitems
save(v)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 748, in save_global
(obj, module, name))
pickle.PicklingError: Can't pickle <function <lambda> at 0x102178668>: it's not found as __main__.<lambda>
단, 다음과 같은 더 나은 시리얼라이저를 사용하는 경우dill또는cloudpickle대부분의 사전을 피클할 수 있습니다.
>>> import dill
>>> pik = dill.dumps(d)
또는 저장하려는 경우dict파일로...
>>> with open('save.pik', 'w') as f:
... dill.dump(globals(), f)
...
후자의 예는 여기에 게재되어 있는 다른 좋은 답변과 동일합니다(이러한 답변은, 다음의 내용에 대한 선택 가능성을 무시한 것을 제외하고).dict★★★★★★★★★★★★★★★★★★」
Python 데이터(예: 사전)를 피클 파일로 덤프하는 간단한 방법입니다.
import pickle
your_dictionary = {}
pickle.dump(your_dictionary, open('pickle_file_name.p', 'wb'))
>>> import pickle
>>> with open("/tmp/picklefile", "wb") as f:
... pickle.dump({}, f)
...
일반적으로 cPickle 구현을 사용하는 것이 좋습니다.
>>> import cPickle as pickle
>>> help(pickle.dump)
Help on built-in function dump in module cPickle:
dump(...)
dump(obj, file, protocol=0) -- Write an object in pickle format to the given file.
See the Pickler docstring for the meaning of optional argument proto.
파일에 dict 1을 합니다.pickle
import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
캐싱 및 복잡한 데이터 저장을 위해 여러 사전을 여러 파일에 저장 및 복원하려면 anycache를 사용하십시오.다른 필요한 것도 다 할 수 있어요.pickle
from anycache import anycache
@anycache(cachedir='path/to/files')
def myfunc(hello):
return {'hello', hello}
Anycache를 합니다.myfunc 파일에 결과가 .cachedir시시시로로로다다
상세한 것에 대하여는, 메뉴얼을 참조해 주세요.
참고로, 판다들은 이제 피클을 구할 방법이 있다.
그게 더 쉬워요.
pd.to_pickle(object_to_save,'/temp/saved_pkl.pickle' )
import pickle
dictobj = {'Jack' : 123, 'John' : 456}
filename = "/foldername/filestore"
fileobj = open(filename, 'wb')
pickle.dump(dictobj, fileobj)
fileobj.close()
파일을 열지 않고 한 줄로 쓰기 또는 읽기를 처리하는 경우:
import joblib
my_dict = {'hello': 'world'}
joblib.dump(my_dict, "my_dict.pickle") # write pickle file
my_dict_loaded = joblib.load("my_dict.pickle") # read pickle file
언급URL : https://stackoverflow.com/questions/11218477/how-can-i-use-pickle-to-save-a-dict-or-any-other-python-object
'programing' 카테고리의 다른 글
| debug 인수를 사용하여 JVM을 시작하지 않고 Java 응용 프로그램을 디버깅합니다. (0) | 2022.09.30 |
|---|---|
| PHP MYSQLI_ASYNC 쿼리 삽입 후 계속 진행 (0) | 2022.09.30 |
| Java 클래스 파일 작성은 결정적입니까? (0) | 2022.09.30 |
| PIL 이미지를 NumPy 어레이로 변환하는 방법 (0) | 2022.09.30 |
| 원격 연결이 간헐적임 (0) | 2022.09.30 |