python(jupyter notebook) 에서 특정변수에 저장된 list data를 txt file로 저장했다가 불러오고 싶은데요!!

조회수 1392회

안녕하세요. 현재 연구실에서 졸업논문과제로 약간의 수치계산을 통해 데이터를 얻고, 이 데이터들을 기반으로 머신러닝을 하고 있는 학부생입니다. 파이썬으로 코드를 짜고나서 돌리기 때문에.. 실험조건을 엄밀하게 할수록 한번 연산실행시 걸리는 시간이 수십분에서 2~3시간까지 가기 때문에 밑에서처럼 4개의 변수에 리스트형으로 수치연산결과들을 저장해두었는데요..

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

E,M,C,X


위에 정의된 E, M, C, X는 특정한 수치연산 알고리즘을 돌려 얻어진 값들을 순차적으로 리스트 형으로 저장한 변수입니다. 4개의 변수안에 어떤 값이 들어있는지 보기 위해 출력하면 다음과 같이 88 사이즈의 numpy array 형의 자료형 4개 출력됩니다.

(array([-97.43466667, -97.37466667, -97.00533333, -96.76933333, -96.688 , -96.26933333, -96.308 , -95.84933333, -95.552 , -95.328 , -94.83466667, -94.36533333, -94.11066667, -93.99333333, -93.484 , -92.824 , -92.16266667, -92.076 , -91.584 , -90.70666667, -90.43733333, -88.844 , -89.364 , -88.33466667, -87.94533333, -87.372 , -86.20266667, -85.964 , -84.75866667, -83.53066667, -82.59333333, -82.52 , -81.76533333, -78.23333333, -78.11866667, -77.376 , -75.47066667, -73.54933333, -71.97866667, -71.60666667, -69.94133333, -68.13066667, -68.91866667, -67.45066667, -64.74266667, -63.65333333, -62.28266667, -62.10533333, -59.75066667, -58.91733333, -58.296 , -57.03333333, -56.15066667, -55.23466667, -54.07066667, -52.75733333, -52.26666667, -50.95733333, -50.4 , -48.62666667, -48.95866667, -47.74133333, -47.73066667, -47.56533333, -45.13866667, -46.068 , -44.38 , -43.984 , -44.05733333, -43.788 , -43.00133333, -41.97866667, -41.55466667, -41.71866667, -40.98133333, -40.74133333, -39.32 , -39.73333333, -39.64933333, -39.49333333, -38.54533333, -38.02266667, -37.90666667, -37.948 , -37.30666667, -36.784 , -36.40533333, -35.78266667]), array([ 9.85853333e+00, -9.85413333e+00, 9.83120000e+00, 9.81826667e+00, -9.81626667e+00, 9.78573333e+00, 9.78653333e+00, -9.76200000e+00, -9.74413333e+00, -9.72960000e+00, 9.69413333e+00, 9.67106667e+00, 9.63626667e+00, -9.64080000e+00, -9.60480000e+00, 9.55893333e+00, -9.50133333e+00, -9.51586667e+00, -9.46413333e+00, -9.40946667e+00, 9.37746667e+00, -9.23706667e+00, -9.29613333e+00, -9.21386667e+00, -9.18613333e+00, 2.26800000e+00, 9.05160000e+00, 3.44626667e+00, -5.98920000e+00, 8.80693333e+00, 8.65560000e+00, 3.21546667e+00, 7.58866667e+00, -1.66573333e+00, 4.01066667e-01, -1.87160000e+00, 1.69200000e+00, -1.83653333e+00, 2.03146667e+00, -3.56080000e+00, 1.68946667e+00, -1.89613333e+00, -6.85066667e-01, -1.85200000e+00, 1.11613333e+00, -1.82293333e+00, 9.37333333e-01, -2.72293333e+00, 5.45866667e-01, 1.21200000e-01, 1.45160000e+00, -2.90533333e-01, -6.39866667e-01, -6.90800000e-01, 3.63733333e-01, 1.69200000e-01, 1.94266667e-01, -6.65333333e-02, 4.92933333e-01, 9.20000000e-02, 2.93733333e-01, -2.92800000e-01, -2.94666667e-02, 1.66266667e-01, 7.45333333e-02, 3.46266667e-01, -1.49333333e-02, 2.62266667e-01, -4.19333333e-01, -2.72400000e-01, 1.25866667e-01, -9.33333333e-02, 2.30800000e-01, 9.92000000e-02, 1.23866667e-01, -5.14533333e-01, 9.42666667e-02, 3.60000000e-03, 9.40000000e-02, -7.66666667e-02, 7.86666667e-02, 1.72133333e-01, 5.64000000e-02, -1.48800000e-01, -8.00000000e-03, 2.06666667e-02, -1.52933333e-01, -1.26133333e-01]), array([ 5.16284365, 5.20040765, 5.25710267, 6.12005967, 5.61262323, 6.99529802, 6.9806522 , 7.413357 , 7.50214669, 7.67440849, 8.85515076, 9.33025775, 9.73287491, 9.56558712, 9.17908894, 10.2581842 , 12.04115699, 11.60163093, 12.5440039 , 13.38724633, 14.18573992, 16.81675007, 15.54815707, 17.13447752, 16.98384724, 18.31758536, 18.05357219, 19.55148075, 19.23237426, 21.76603351, 23.75643262, 22.92823783, 24.19084524, 30.08263376, 29.70998544, 30.09367642, 31.30588114, 28.80604504, 34.24429274, 32.00057513, 36.33492461, 32.60201491, 30.73064562, 30.5841804 , 31.13485339, 30.90692388, 30.25816351, 32.11468515, 30.17408978, 28.71135448, 28.03087428, 28.05883428, 25.46357295, 23.62378807, 23.90370567, 21.18237774, 23.79410701, 16.83742451, 20.4801458 , 16.73558402, 17.95060942, 18.12731754, 16.63149099, 17.20168999, 14.13251436, 14.35095692, 13.79958654, 13.49327434, 13.15747374, 12.69151272, 11.83044717, 10.97848079, 11.25924544, 10.66655846, 10.58316205, 10.73141176, 9.98373401, 9.72636108, 9.1596116 , 8.65114754, 8.78142517, 8.71167516, 8.44877951, 8.27825886, 8.6901674 , 7.81104384, 7.78479679, 7.53105476]), array([2.77425659e-02, 2.95368435e-02, 3.39796414e-02, 3.75819391e-02, 3.33464570e-02, 4.94184520e-02, 4.87433238e-02, 5.19444040e-02, 5.11310326e-02, 5.72264133e-02, 7.37098156e-02, 7.24320963e-02, 1.05026020e-01, 8.64575392e-02, 8.86253733e-02, 1.19995910e-01, 1.46702763e-01, 1.18562439e-01, 1.49510531e-01, 1.64027040e-01, 1.99259637e-01, 3.26890561e-01, 2.39253444e-01, 3.03678437e-01, 2.68708413e-01, 3.91749712e+01, 3.34405913e-01, 3.41034638e+01, 2.13748831e+01, 4.88308246e-01, 6.84205392e-01, 3.11505859e+01, 8.03958319e+00, 2.99442680e+01, 3.12904378e+01, 2.88671867e+01, 2.74645005e+01, 2.54013056e+01, 2.36371031e+01, 1.96177907e+01, 2.23186167e+01, 2.01275898e+01, 2.22702666e+01, 1.95565624e+01, 1.83455010e+01, 1.61416509e+01, 1.61283666e+01, 1.35074490e+01, 1.45256679e+01, 1.37077149e+01, 1.29355923e+01, 1.28424460e+01, 1.20409040e+01, 1.10235271e+01, 1.02548738e+01, 9.41031641e+00, 9.54449257e+00, 7.95380134e+00, 8.06937099e+00, 7.03725387e+00, 7.31195492e+00, 6.63737615e+00, 6.61091580e+00, 6.64080234e+00, 5.43464584e+00, 5.76135275e+00, 5.25421001e+00, 4.69257162e+00, 4.85561025e+00, 4.35195471e+00, 4.41030917e+00, 3.93651593e+00, 3.74254430e+00, 3.79814907e+00, 3.42747786e+00, 3.53444161e+00, 3.20311333e+00, 3.08937806e+00, 3.13477919e+00, 3.29561668e+00, 2.88980640e+00, 2.78908359e+00, 2.67705236e+00, 2.59693996e+00, 2.69123645e+00, 2.49358822e+00, 2.42748287e+00, 2.22436902e+00]))

현재 주피터노트북을 사용중인데, 이 데이터들을 txt 파일로 저장했다가, 나중에 다시 txt파일로부터 불러오기를 해서

지금 위에 출력된 형태로 다시 사용하고 싶습니다.

안그러면 매번 주피터노트북 킬때마다 셀을 다시 실행시켜야해서 시간을 많이 잡아먹습니다.

그러려면 어떤식으로 txt 저장및 불러오기 코드를 작성해야 할까요??

인터넷에서 몇군데 알아봤는데, 대부분 python으로 txt open, write, close 하는 방법뿐이고,

리스트형을 txt로 고스란히 저장했다가 불러오는 방법은 잘 안보여서 질문 드립니다//

고수형님들 부탁드려요 ㅜ.ㅜ//

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    기본적으로 질문자와 같은 경우는 직렬화를 이용하여 파일에 저장하고 그것을 다시 로드할 수 있습니다.

    직렬화란 여기저기 메모리상에 흩어져 있는 데이터를 차례대로 늘어놓고 그것을 바이트형태로 저장한 형태입니다. 즉 외부로 저장하고 복원이 가능하도록 하는 것입니다.

    파이썬에서는 pickle 이라는 모듈이 제공됩니다.

    네 피자 먹을때 그 피클...입니다. 음식을 장기간 보존하기 위해서 하는 것처럼 파이썬에서는 데이터를 보존했다가 필요할 때 사용할 수 있게 피클이라는 모듈을 이용해서 할 수 있습니다.

    사용법은 간단합니다.

    • 저장하기
    In [1]: import pickle                                                           
    
    In [2]: L = [1, 'a', 3.14, range(10)]                                           
    
    In [3]: with open('mypickle.bin', 'wb') as f: 
       ...:     pickle.dump(L, f)
    
    • 불러오기
    In [1]: import pickle                                                           
    
    In [2]: with open('mypickle.bin', 'rb') as f: 
       ...:     L = pickle.load(f)                                                                
    
    In [3]: L                                                                       
    Out[3]: [1, 'a', 3.14, range(0, 10)]
    

    한발 더 나아가서 shelve 라는 모듈을 이용해서 피클링된 객체를 다수개 관리(데이터베이스 처럼)할 수도 있습니다. 이것은 학습을 해보시기 바랍니다.

    • 글쿤요!! 도움이 많이 되었어요 ㅎㅎ ㄳㄳ 박형선 2019.5.13 23:14
  • 리스트 객체 상태로 파일에 저장하면 되지않을까요.

    객체 저장 방법은 구글링하시구요

    (아니면 요기 참고.. https://dojang.io/mod/page/view.php?id=2327)

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 그렇군요!! 답변 감사합니다 ㅎ 박형선 2019.5.13 23:14

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)