피클 파일을 읽는 방법?
몇 가지 데이터를 생성하여 다음과 같이 여러 번 저장했습니다.
with open('filename', 'a') as f:
pickle.dump(data, f)
파일 크기가 증가할 때마다 파일을 열 때마다
with open('filename', 'rb') as f:
x = pickle.load(f)
저는 지난번 데이터만 볼 수 있습니다.파일을 올바르게 읽는 방법은 무엇입니까?
피클은 한 번에 단일 개체를 직렬화하고 단일 개체를 다시 읽습니다. 피클된 데이터는 파일에 순서대로 기록됩니다.
당신이 단순히 한다면,pickle.load
파일에 직렬화된 첫 번째 개체를 읽어야 합니다(작성한 마지막 개체가 아님).
첫 번째 개체의 직렬화를 해제한 후 파일 포인터는 다음 개체의 시작 부분에 있습니다(단순히 호출할 경우).pickle.load
다시, 다음 개체를 읽을 것입니다. 파일이 끝날 때까지 그렇게 하십시오.
objects = []
with (open("myfile", "rb")) as openfile:
while True:
try:
objects.append(pickle.load(openfile))
except EOFError:
break
판다 0.22+의 일부로 read_pickle 기능이 있습니다.
import pandas as pd
obj = pd.read_pickle(r'filepath')
다음은 피클 파일을 쓰고 읽는 방법의 예입니다.파일에 피클 데이터를 계속 추가하는 경우 원하는 것을 찾을 때까지 파일을 계속 읽거나 파일 끝에 도달하여 예외가 생성됩니다.그것이 마지막 기능이 하는 것입니다.
import os
import pickle
PICKLE_FILE = 'pickle.dat'
def main():
# append data to the pickle file
add_to_pickle(PICKLE_FILE, 123)
add_to_pickle(PICKLE_FILE, 'Hello')
add_to_pickle(PICKLE_FILE, None)
add_to_pickle(PICKLE_FILE, b'World')
add_to_pickle(PICKLE_FILE, 456.789)
# load & show all stored objects
for item in read_from_pickle(PICKLE_FILE):
print(repr(item))
os.remove(PICKLE_FILE)
def add_to_pickle(path, item):
with open(path, 'ab') as file:
pickle.dump(item, file, pickle.HIGHEST_PROTOCOL)
def read_from_pickle(path):
with open(path, 'rb') as file:
try:
while True:
yield pickle.load(file)
except EOFError:
pass
if __name__ == '__main__':
main()
브라우저에서 파일을 직접 여는(대부분) 소프트웨어 도구를 개발했습니다(전송되는 것이 없으므로 100% 비공개).
https://pickleviewer.com/ (이전)
이제 여기서 호스팅됩니다. https://fire-6dcaa-273213.web.app/
편집: https://github.com/ch-hristov/Pickle-viewer 에서 호스팅하려면 여기에서 사용할 수 있습니다.
편하게 진행해주세요.
언급URL : https://stackoverflow.com/questions/35067957/how-to-read-pickle-file
'programing' 카테고리의 다른 글
tqdm 진행 표시줄에 메시지를 추가할 수 있습니까? (0) | 2023.06.16 |
---|---|
비어 있는 경우 MariaDB/MySQL에서 defaults-group-suffix로 작업 (0) | 2023.06.16 |
Python 정규식이 true/false를 반환합니다. (0) | 2023.06.11 |
겉보기에는 올바른 절차를 만드는 중이지만 SQL 구문 오류가 발생합니다. (0) | 2023.06.11 |
Oracle SQL에서 1시간 추가 (0) | 2023.06.11 |