오늘도 오늘의 해가 떴군요~

저는 ‘내일은 내일의 해가 뜰거야’라는 말을 가끔 악용한답니다.

오늘 할 일을 내일로 미룰 때…^^;

 

오늘은 파일을 입맛대로 요리할 수 있도록 여러 가지 비법을 전수해드리지요.

먼저 조금 복잡한 자료를 파일에 쓰고 읽는 방법부터 알아봅시다.

이럴 때는 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>이라고 출력해주고, 그렇지 않으면 그냥 줄만 넘겨주도록 했지요.

 

벌써 집에 가기로 약조한 시간이 되었습니다.

내일도 뜨거운 해가 떠오르기를

将把此主题..