๋ฐ์ดํฐ ๋ถ์ ํ ๋๋ ๊ทธ๋ ๊ณ , ์ต๊ทผ๊น์ง ์กธ์
ํ๋ก์ ํธ๋ก ์ถ์ฒ์์คํ
ํ ๋๋ ๊ทธ๋ ๊ณ ํฐ ํฌ๊ธฐ์ ๋ฐ์ดํฐํ๋ ์์ ๋ค๋ฃฐ ๋๊ฐ ๋ง๋ค.
๊ทธ ๋ ๊ทธ ๋ ์ผ์ผ์ด ๋ถ๋ฌ์์ ์ฒ๋ฆฌํ๊ธฐ์ ์๊ฐ๋ ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ,,, ๋๋ฌด ๋นํจ์จ์ ์ด๋ค.
์ด๋ด ๋ ์ง๋ ฌํํด์ ์ฒ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐ ๊ทธ๋๋ก ์ ์ฅํด ๋๋๊ฒ ์ ์ฉํด์ ํ ๋ฒ ์ ๋ฆฌ๋ฅผ ํด ๋ณด์๋ค.
์ง๋ ฌํ - ์ญ์ง๋ ฌํ / Serialization - Deserialization
- ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ ์ค๋ธ์ ํธ์ ์ํ๋ฅผ ๋ฉ๋ชจ๋ฆฌ, ํ์ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ์ ์ฅํ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ๊ธฐ ์ํด
ํน์ ํฌ๋งท์ผ๋ก ๋ณํํ๋ ๊ณผ์
. - ๋ฐ๋๋ก ์ง๋ ฌํํ๋ ๋ฐ์ดํฐ ํฌ๋งท์ ์ ์ฅํ๋ ๊ทธ ์ํ๋ก ๋ณต์ํ๋ ๊ณผ์ ์ ์ญ์ง๋ ฌํ๋ผ๊ณ ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ฐ์์ ์ธ
๋ฐ์ดํธ ์คํธ๋ฆผ
์ผ๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ์ง๋ ฌํ๋ผ๋ ์ด๋ฆ์ด ๋ถ์๋ค. - ๋ณํ๋ Byte Stream์
ํ๋ซํผ์ ์ข ์๋์ง ์๊ธฐ ๋๋ฌธ์
๋ค๋ฅธ ํ๋ซํผ์์ ์ญ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ๋ค. - ํ์ด์ฌ์์๋ pickle ๋ชจ๋์ ์ด์ฉํด ์ง๋ ฌํ๋ฅผ ํ ์ ์๋ค.
pickle
- pickle ๋ชจ๋์ ์ด์ฉํ๋ฉด ํ์ด์ฌ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ ์ ์๋ค.
pickle๋ก ์ง๋ ฌํ ๊ฐ๋ฅํ type๋ค
None
,True
์False
- ์ ์, ์ค์, ๋ณต์์
- ๋ฌธ์์ด, ๋ฐ์ดํธ์ด, ๋ฐ์ดํธ ๋ฐฐ์ด(bytearray)
- ํํ, ๋ฆฌ์คํธ, ์งํฉ๊ณผ ๋์ ๋๋ฆฌ
- ๋ด์ฅํจ์, ์ ์๋ ํจ์
- ํด๋์ค
(์ฌ์ค ์ฌ๋งํ๋ฉด ๋ค ๊ฐ๋ฅ... ์ธ๋ถ์ ์ธ ๊ธฐ์ค์ด ์๊ธด ํ์ง๋ง ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ฏํ๋ค.)
โผ๏ธ ์ง๋ ฌํ ๋ถ๊ฐ๋ฅํ ํ์
์ ๊ฒฝ์ฐ PicklingError ์์ธ ๋ฐ์!
๋ฐ์ดํฐ์ ๊ตฌ์กฐ๊ฐ ์ฌ๊ท๋ก ๋์ด์์ผ๋ฉด RecursionError๋ ๋ฐ์ํ ์ ์๋ค๊ณ ํ๋ค.
pickle ์์
import pickle
data = ['pickle', 'pizza', 'cheeze', 'potato']
# ๋ฐ์ดํฐ ์ฐ๊ธฐ
# ๋ฐ์ดํธ ํ์
์ผ๋ก ์ฐ๊ธฐ ๋๋ฌธ์ wb
with open ('file_name.bin', 'wb') as f:
pickle.dump(data, f)
# ๋ฐ์ดํฐ ์ฝ๊ธฐ
with open ('file_name.bin', 'rb' as f:
read_data = f.load(f)
- ๋ฐ์ดํธ ํ์ ์ผ๋ก ์ ์ฅํ ๋๋ .bin ํ์ฅ์๋ฅผ ์ฐ๋ฉด ๋๋ค. (Binary text type)
# ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๊ฐ์ฒด๋ก ๋ณํ
obj = pickle.dumps(data)
# ๋ฐ์ดํฐ ๋ณต์
origin_data = pickle.loads(obj)
- ์ง๋ ฌํํ ๊ฐ์ฒด๋ฅผ ํ์ผ์ ์ฐ์ง ์๊ณ bytes ๊ฐ์ฒด๋ก ๋ฐํํ ์๋ ์๋ค.
pickle vs marshal
์ง๋ ฌํ ํ ๋ marshal ๋ชจ๋์ ์ฌ์ฉํ ์๋ ์์ง๋ง, ๊ณต์ ๋ฌธ์์์๋ pickle์ ๋ ์ถ์ฒํ๊ณ ์๋ค.
๋ํ์ ์ธ ์ฐจ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค
- marshal์ ํ์ด์ฌ ๋ฒ์ ๋ณ ํธํ์ด ๋์ง ์๋๋ค.
- pickle๊ณผ๋ ๋ค๋ฅด๊ฒ marshal์ ์ฌ์ฉ์ ์ ์ ํด๋์ค์ ์ธ์คํด์ค๋ ์ง๋ ฌํํ ์ ์๋ค.
pickle vs json
๋ํ์ ์ธ ์ง๋ ฌํ ๋ฐฉ๋ฒ์ผ๋ก json ํ์ ์ด ์๋๋ฐ ์ฐจ์ด์ ์ ์์๋๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
- json์ ํ
์คํธ๋ฅผ ์ง๋ ฌํํ๋ ๊ฒ์ด๊ณ ์ฌ๋์ด ์ฝ์ ์ ์๋ค.
but pickle์ ์ด์ฉํ ์ง๋ ฌํ๋ ๋ฐ์ดํธ ํ์ ์ง๋ ฌํ๋ผ ์ฌ๋์ด ์ฝ์ ์ ์๋ค. - json์ ์ธ๋ถ ์์คํ
๋ค๊ณผ์ ํธํ์ด ๋์ง๋ง (์ธ๋ถ ํ์ค์ ๋ฐ๋ฆ) pickle์ ํ์ด์ฌ ์์คํ
์์๋ง ๊ฐ๋ฅ
๋์ ์ธ๋ถํ์ค์ ๋ฐ๋ผ์ผํ๋ ๋งํผ json์ ํ์ํ ์ ์๋ ์๋ฃํ์ด ํ์ ๋์ด์๊ณ , pickle์ ๋ค์ํ ํ์ด์ฌ ์๋ฃํ์ ๋ํ๋ผ ์ ์๋ค (๊ทธ๋์ ๋ฐ์ดํฐํ๋ ์ ๊ฐ์ ๊ฒ๋ ํผํด์ ์ด์ฉํ๋ ๋ฏ!)
Reference
pickle — ํ์ด์ฌ ๊ฐ์ฒด ์ง๋ ฌํ — Python 3.10.0 ๋ฌธ์
pickle — ํ์ด์ฌ ๊ฐ์ฒด ์ง๋ ฌํ ์์ค ์ฝ๋: Lib/pickle.py pickle ๋ชจ๋์ ํ์ด์ฌ ๊ฐ์ฒด ๊ตฌ์กฐ์ ์ง๋ ฌํ์ ์ญ ์ง๋ ฌํ๋ฅผ ์ํ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ๊ตฌํํฉ๋๋ค. ใํผํด๋ง(pickling)ใ์ ํ์ด์ฌ ๊ฐ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๊ฐ
docs.python.org
'๐ ๋ฐ์ดํฐ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python ์๊ฐํ] ์ฃผํผํฐ ๋ ธํธ๋ถ์์ matplotlib ํ๊ธ ํฐํธ & ๋ง์ด๋์ค ๋ถํธ ์ ์ฉํ๊ธฐ (0) | 2021.11.07 |
---|