2017-09-07 4 views
1

피클 파일에 데이터를 저장하는 기능을 빌드하려고합니다.피클 기능

with open('x.pickle', 'wb') as f: 
    pickle.dump(x, f) 

을하지만 실제로는 그것에서 함수 그래서 다시하고 다시 작성할 필요가 없습니다 만들고 싶어 : 나는 이런 식으로 피클을 사용하여 작동하는지 알고있다. 다음은 내가 시도한 것입니다 :

def pickle_dump(x): 
    with open('%s.pickle'%x, 'wb') as f: 
     pickle.dump(x, f) 
    return 

'with'를 사용하고 파일이 존재하지 않으면 파일을 만듭니다. 나는 함수 안에서도 작동 할 것이라고 생각했지만, 대신 File Not Found Error를 리턴했다.

도움을 주시면 감사하겠습니다.

+1

흠, 그건 아주 이상합니다. 당신은 확실합니까? 'pickle_dump'에서''wb'' 인자를 사용하고 있습니까? 귀하의 코드를 테스트하기 때문에 내게 잘 작동합니다 .. –

+1

명시 적으로'filename'을 전달하려고한다고 생각합니다 ... –

+3

객체'x'의 문자열 표현은 파일 이름에서 유효하지 않은 임의의 문자를 포함 할 수 있습니다. 'x.pickle'이라는 이름의 파일을 생성 할 것을 기대했다면, 매개 변수의 이름이'x' 인 것만으로 파이썬이 작동하는 방식이 아닙니다. 객체는 일반적으로 이름이 무엇인지 모릅니다. – jasonharper

답변

1

문자열 경로 이름을 실제 객체와 혼동하는 것처럼 보입니다. 그들은 서로 다른 두 가지입니다.

def pickle_dump(path, x): 
    """Pickle object `x` to `path`.""" 
    with open('%s.pickle' % path, 'wb') as f: 
     pickle.dump(x, f) 

예 :

import pandas as pd 
df = DataFrame() # the actual object you want to pickle 
pickle_dump(path='files/filename', x=df) 

이 역에서 같은 일을하려면 :

을 :

지금
def pickle_load(path): 
    with open('%s.pickle' %path, 'rb') as f: 
     return pickle.load(f) 

당신이 함수의 반환 값에 변수를 할당 할이 실행

result = pickle_load('mypath/filename') 

commen에서 t, 함수 본문에 변수 x을 명명했습니다. 그러나 로컬 변수임을 깨달으십시오. 함수 밖에서는 액세스 할 수 없습니다. 그것은 return 문이 필요한 경우입니다.

+0

다음과 같이 pickle_load 함수를 사용하여이 작업을 시도해 보았습니다. def pickle_load (경로) : open ('% s.pickle'% 경로 'rb')을 f : x = pickle.load f) 왜 이것이 올바르지 않습니까? –

+0

예, 매우 유용합니다! 정말 고맙습니다! –

1

개체와 파일 이름을 모두 전달하십시오.

import cPickle as pickle # Python 2 

def pickle_dump(obj, filename): 
    if filename.split('.')[-1] != 'p': 
     filename += '.p' # Add pickle file extension `.p` if needed. 
    with open(filename, 'wb') as f: 
     pickle.dump(obj, f, protocol=pickle.HIGHEST_PROTOCOL)