2012-12-18 3 views
15

파일이 pickle으로 작성되었는지 확인하는 방법이 있습니까? pickle.load에 의해 던진 예외를 잡을 수는 있지만 특정 "피클 파일이 아님"예외는 없습니다.피클에 의해 파일이 생성되었는지 테스트하는 방법은 무엇입니까?

+9

식초와 딜의 흔적을 확인하십시오 –

+0

방금'pickle.dump'를 사용했을 때 파일이 생성되었는지 *'pickle.load'를 사용할 때 파일이 존재하는지 걱정 하시겠습니까? 어느 경우이든 실제'pickle' 줄이 아닌 출력이나 입력을 위해 파일 핸들을 열 때 오류가 발생합니다. –

+0

나는 파일이 존재하는지 아닌지에 대해 걱정하지 않는다. 그러나 존재하는 파일이'pickle'에 의해 만들어 졌는지에 대해서 걱정하지 않는다. – Erik

답변

8

피클 파일에는 헤더가 없으므로 피클 파일에 헤더가 없으므로 피클을 파일롯 해제하려는 시도가 부족하고이를 수행하는 동안 예외가 발생하는지 알 수없는 표준 방법이 없습니다.

모듈의 Pickler()Unpickler() 클래스를 서브 클래 싱하여 특정 종류의 헤더를 포함하는 고유 한 고급 프로토콜을 정의 할 수 있습니다. 그러나 훨씬 더 빠른 cPickle 모듈을 사용하면이 모듈을 서브 클래스화할 수없는 팩토리 함수가 있으므로 [1] 모듈을 사용할 수 없습니다.

더 유연한 접근 방식은 구현시 이러한 모듈 중 하나에서 해당 Pickler()Unpickler() 인스턴스를 사용하는 독자적인 클래스를 정의하는 것입니다. 헤더가없는 반면, 그래서

업데이트

모든 피클 파일의 마지막 바이트는 은 비교적 간단한 일이 될 것이다 아주 최소한의 트레일러 효과적으로이,의 pickle.STOP 오피해야한다 검사.

정확한 사용에 따라, 당신은 절인 객체의 표현의 STOP 오피 과거 데이터 이후 더 정교한 뭔가 무시됩니다 보완 멀리 얻을 수 있습니다 [2]합니다.

[1] 파이썬 2 설명서     Footnote [2].
[2]     문서가 현재 후자의 관점에서 구현 된 이후도 pickle.load() 적용 pickle.loads() 대한.
7

아무 것도 제거하지 말고 예외를 잡으려고하는 것 외에는 확실한 방법이 없습니다.

관련 문제