파일을 입맛대로 요리할 수 있도록 여러 가지 비법을 전수해드리지요. 먼저 조금 복잡한 자료를 파일에 쓰고 읽는 방법부터 알아봅시다. 이럴 때는 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는 파일들의 목록을 뽑을 때 사용하는데, 파일의 경로명을 이용해서 입맛대로 요리할 수 있답니다.
>>> glob.glob('*.*')
['INSTALL.LOG', 'LICENSE.txt', 'NEWS.txt', 'py.ico', 'pyc.ico', 'pycon.ico', 'python.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>이라고 출력해주고, 그렇지 않으면 그냥 줄만 넘겨주도록 했지요.
출처 : wikidocs 왕초보를 위한 파이썬
'Python > 왕초보를 위한 파이썬' 카테고리의 다른 글
7.1. 클래스와 인스턴스 (0) | 2012.04.06 |
---|---|
07. 객체지향 (0) | 2012.04.06 |
6.2. 한 줄 씩 다루기 (0) | 2012.04.04 |
6.1. 파일 입출력 (0) | 2012.04.04 |
5.4. 무작위(Random) 뭉치 (0) | 2012.04.04 |
댓글