본문 바로가기

카테고리 없음

[ Python ] shelve 패키지를 사용해서 파일에 저장하고 읽기

반응형

shelve 패키지는 Python에서 객체를 파일에 저장하고, 파일에서 객체를 쉽게 읽어오는 기능을 제공합니다. pickle과 유사하지만, shelvedict와 비슷한 인터페이스를 제공하므로 키-값 쌍으로 데이터를 관리할 수 있습니다.

shelve을 사용한 파일 쓰기

shelve을 사용하여 데이터를 파일에 저장하는 방법은 매우 간단합니다. open() 함수를 사용하여 shelf 객체를 생성하고, 이 객체를 통해 키-값 쌍을 파일에 저장할 수 있습니다.

import shelve

# 데이터를 저장할 파일 열기 (쓰기 모드)
with shelve.open('mydata') as shelf:
    shelf['name'] = 'Alice'
    shelf['age'] = 30
    shelf['is_student'] = False

이 코드에서 shelve.open()mydata라는 파일을 열거나 생성합니다. 이 파일은 .dat, .dir, .bak 등의 확장자로 여러 파일이 생성될 수 있습니다. 이후 shelf 객체는 마치 딕셔너리처럼 사용할 수 있습니다.

shelve을 사용한 파일 읽기

파일에 저장된 데이터를 읽어오는 것도 간단합니다. shelve.open()을 사용하여 파일을 열고, 키를 이용해 값을 읽어올 수 있습니다.

import shelve

# 데이터를 읽을 파일 열기 (읽기 모드)
with shelve.open('mydata') as shelf:
    name = shelf['name']
    age = shelf['age']
    is_student = shelf['is_student']

    print(f"Name: {name}")
    print(f"Age: {age}")
    print(f"Is student: {is_student}")

이 코드를 실행하면, mydata 파일에서 키에 해당하는 값들을 읽어와 출력하게 됩니다.

shelve의 특징

  • 편리한 데이터 저장: shelve은 딕셔너리와 같은 인터페이스를 제공하여 데이터를 키-값 쌍으로 쉽게 저장하고 불러올 수 있습니다.
  • 자동 직렬화: shelve는 내부적으로 pickle을 사용해 객체를 직렬화하고, 파일에서 비직렬화합니다.
  • 파일 관리: 데이터는 내부적으로 여러 파일에 나뉘어 저장될 수 있습니다. 이 파일들은 직접적으로 다루지 않고, shelve 인터페이스를 통해 간접적으로 접근합니다.

실행 예제

위에서 설명한 코드들을 하나로 합치면, 다음과 같이 데이터를 저장하고 읽어올 수 있습니다:

import shelve

# 데이터 저장
with shelve.open('mydata') as shelf:
    shelf['name'] = 'Alice'
    shelf['age'] = 30
    shelf['is_student'] = False

# 데이터 읽기
with shelve.open('mydata') as shelf:
    name = shelf['name']
    age = shelf['age']
    is_student = shelf['is_student']

    print(f"Name: {name}")
    print(f"Age: {age}")
    print(f"Is student: {is_student}")

주의 사항

  • 동시 접근: shelve는 기본적으로 단일 프로세스에서 사용되도록 설계되었습니다. 여러 프로세스에서 동시에 접근할 경우 동기화 문제나 충돌이 발생할 수 있습니다.
  • 파일 확장자: shelve는 플랫폼에 따라 여러 파일을 생성할 수 있으며, 그 확장자가 다를 수 있습니다.
  • 보안: pickle을 사용하므로, 신뢰할 수 없는 데이터를 shelve 파일로부터 로드하지 않도록 주의해야 합니다.

shelve 패키지는 파일에 데이터를 쉽게 저장하고 불러오는 데 유용하며, 특히 단순한 키-값 구조의 데이터를 다룰 때 편리합니다.

반응형