오늘도 오늘의 해가 떴군요~
저는 ‘내일은 내일의 해가 뜰거야’라는 말을 가끔 악용한답니다.
오늘 할 일을 내일로 미룰 때…^^;
오늘은 파일을 입맛대로 요리할 수 있도록 여러 가지 비법을 전수해드리지요.
먼저 조금 복잡한 자료를 파일에 쓰고 읽는 방법부터 알아봅시다.
이럴 때는 pickle(피클)이란 모듈을 사용합니다.
왜 피자 먹을 때 나오는 반찬을 이름으로 붙였는지…
예제로는 회원의 ID와 비밀번호를 파일에 저장하는 것을 생각해보았습니다.
|
>>> users = {'kim':'3kid9', 'sun80':'393948', 'ljm':'py90390'} >>> f = open('d:/python21/exam/users.txt', 'w') >>> import pickle >>> pickle.dump(users, f) >>> f.close() |
처음에 ID와 비밀번호를 users라는 사전에 담았습니다.
그리고 users.txt라는 파일을 새로 열어서 f라고 했구요.
그 다음에는 오이지(pickle^^;) 모듈의 덤프(dump)를 사용했습니다.
여러분 덤프 트럭 다 아시죠? 왜 공사장에서 흙 싣고 다니는 무지 큰 트럭 있잖아요.
그런 차는 뒤쪽 짐칸을 들어올려서 흙을 와르르 쏟아내지 않습니까?
여기서 보시는 dump도 마찬가지입니다.
users라는 리스트의 내용을 파일 f에 와르르 쏟아붓는 거지요.
음, 이렇게까지 설명할 필요는 없을 텐데… 오늘 쓸 것이 없다보니…
이제 메모장으로 users.txt 파일을 열어보시면 모양이 좀 지저분하긴 해도 데이터가 다 들어있는 걸 보실 수 있을 거예요.
그렇다면 이 파일에 들어있는 것을 원래대로 돌려볼까요?
원래대로 돌리는 것도 역시 오이지 모듈이 할 일이겠죠.
|
>>> f = open('d:/python21/exam/users.txt') >>> a = pickle.load(f) >>> print a {'sun80': '393948', 'kim': '3kid9', 'ljm': 'py90390'} |
사실 방금 보여드린 것은 그리 복잡할 것도 없지만 pickle 모듈은 파이썬에서 만들어지는 것은 뭐든지 다 파일에 적을 수 있다고 합니다.
‘그게 뭐 어때서’라고 생각하실지 모르겠지만 이건 놀라운 기능이라고 튜토리얼에 쓰여있습니다.
오이지는 이쯤 해두고, 전에 잠깐 구경했던 glob 모듈에 대해 알아보도록 하죠.
glob는 파일들의 목록을 뽑을 때 사용하는데, 파일의 경로명을 이용해서 입맛대로 요리할 수 있답니다.
|
>>> import glob >>> glob.glob('*.*') ['INSTALL.LOG', 'LICENSE.txt', 'NEWS.txt', 'py.ico', 'pyc.ico', 'pycon.ico', 'py thon.exe', 'pythonw.exe', 'readme.txt', 'UNWISE.EXE', 'w9xpopen.exe'] >>> glob.glob('*.txt') ['LICENSE.txt', 'NEWS.txt', 'readme.txt'] |
위에서 별표(*)는 무슨 글자든, 몇 글자든 상관 없다는 뜻으로 디렉토리(폴더)에 들어있는 파일들을 그냥 다 보려면 ‘*.*’라고 해주면 됩니다.
파일명에 상관 없이 확장자가 txt인 파일을 모두 보고 싶으면 ‘*.txt’라고 하면 되지요.
다음은 glob과 함께 os.path 모듈을 사용한 예제입니다.
|
>>> import os.path >>> files = glob.glob('*') >>> for x in files: ... print x, ... if os.path.isdir(x): # 디렉토리인가? ... print '<DIR>' ... else: ... print '' |
스크립트만 보고 어떤 일을 하는건지 짐작이 가시는지요?
둘째줄에서 glob.glob(‘*’)를 해서 얻어진 파일 목록들을 files라는 리스트로 넣어줬습니다.
그 다음부터는 for 문을 통해서 파일명을 하나씩 출력한 다음 그것이 디렉토리이면 <DIR>이라고 출력해주고, 그렇지 않으면 그냥 줄만 넘겨주도록 했지요.
벌써 집에 가기로 약조한 시간이 되었습니다.
내일도 뜨거운 해가 떠오르기를…
