Monday, December 13, 2010

file I/O by python

전 포스팅에도 언급했듯이 요즘 perl calendar를 참조하고 있다. 나같은 허접댕이들은 언어로 어떠한 일을 할 수 있는지 조차도 잘 모르기 때문에 그 사이트를 보면서 아.. 이런것도 할수 있구나 하고 좋은 팁을 많이 얻는다. 
이번에 봐볼 것은 파일 입출력! 우선 motive가 된 perl calendar 셋째날 http://advent.perl.kr/2010-12-03.html


위의 코드를 나름 이해하자면.. 우선 파일을 바이너리 파일로 변환한다. 파일에 특정 범위의 숫자가 들어가 있으므로 byte를 정해서 바이너리로 변환한다(pack). 변환되 바이너리 파일에 접근하기 위해서는 이미 알고 있는 행과 열의 갯수와 각 값에 할당된 byte 수로 접근 가능한 수치(offset)로 변환한다. 그리고 map 모듈을 이용해서 하드 디스크의 파일을 메모리에 같다 붙여서 아까 구한 offset을 이용해서 바로 파일의 특정 위치에 접근한다.


이걸 python으로 할려면 필요한 모듈이..
데이터를 binary로 변환하는 모듈,
perl의 map모듈과 같은 역할을 하는 python 모듈




-pickle-
우선은 내가 잘 이용하지 않았던 pickle이란 모듈: http://swingbeat.egloos.com/4076363
자세한 내용은 http://docs.python.org/library/pickle.html. 그런데 내가 산 책에는 pickle을 이용하려면 파일을 열때 바이너리 모드로 열어라고 했는데.. 근데 꼭 그런거 같진 않네. 그냥 열어도 dump를 하면 binary모드랑 똑같은 형식으로 써진다.
-mmap-
http://docs.python.org/library/mmap.html
이게 대충 보니까 mapped된 파일은 mutable 하기에 바로 접근해서 수정가능한 것 같다. 자신이 원하는 파일의 위치를 알때 이를 사용하면 좋을듯


그밖에
http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
http://linux.byexamples.com/archives/478/python-writing-binary-file/



이건 상관없는건데 그냥..
-ctypes tutorial-
http://python.net/crew/theller/ctypes/tutorial.html