지난 시간에 이어 오늘도 텍스트 파일을 괴롭혀 보겠습니다.

오늘은 한 줄 씩 난도질을… --+

 

파일을 처음부터 끝까지 읽을 땐 read()를 썼죠?

한 줄 씩 읽을 때는 readline()을 사용하시면 됩니다.

제발 좀 읽어달라고 울부짖는 readme 파일을 한 번 읽어줄까요?

 

>>> f = open('c:/python21/readme.txt')

>>> f.readline()                              # 한 줄 읽어~

'This is Python version 2.1\n'

>>> f.readline()                               # 한 줄 더 읽어~

'==========================\n'

 

간단하죠? 별 것 아닙니다.

파일 내용을 처음부터 주루룩~ 읽어나가다가 ‘\n’이 나타나면 한 줄이 끝난 줄 알고 딱 멈춰서게 되는 겁니다.

 

다음과 같이 반복문과 readline()을 사용하면 텍스트를 원하는 줄 수 만큼만 읽어들일 수 있답니다.

 

>>> f = open('c:/python21/readme.txt')

>>> for x in range(5):

...     line = f.readline()

...     print line,

...

This is Python version 2.1.1

============================

 

Copyright (c) 2001 Python Software Foundation.

All rights reserved.

>>>

 

파일을 한 줄 씩 읽어 화면에 출력하기를 다섯 번 되풀이했지요.

print line,에서 끝에 쉼표를 찍어준 것은 readline()으로 읽은 줄들도 개행문자를 포함하고 있고, print 문 자체도 줄 넘김 기능이 있어서 그냥 print line이라고 하면 두 줄 씩 넘겨버리기 때문입니다.

 

이번엔 똑같이 다섯 줄을 읽기는 하지만 조금 다르게 하는 방법을 보여드리겠습니다.

 

>>> f=open('d:/python21/readme.txt')

>>> lines = f.readlines()

>>> import sys

>>> sys.stdout.writelines(lines[:5])

This is Python version 2.1

==========================

 

Copyright (c) 2001 Python Software Foundation.

All rights reserved.

>>>

 

여기서는 readline()이 아니라 readlines()를 사용했습니다. s 자가 더 붙었죠?

readlines()로 파일을 읽으면 한 줄, 한 줄이 각각 리스트의 원소로 들어갑니다. 파일 전체가 lines라는 리스트에 쏙 담기는 거죠.

그 다음엔 sys 모듈을 이용해서 lines에 들어있는 것들을 입맛대로 꺼내실 수 있습니다.

 

이 방법을 쓰면 아주 쉽게 원하는 줄을 읽어들일 수 있겠죠? 16번째 줄부터 20번째 줄까지를 읽어볼까요?

15:20이라고 하는지 아리송하신 분은 ‘문자열과 리스트’강좌를 복습하셔야겠네요.

 

>>> sys.stdout.writelines(lines[15:20])

 

License information

-------------------

 

See the file "LICENSE" for information on the history of this

>>>

 

오늘의 하이라이트! 끝에서 다섯 줄을 읽어봅시다.

 

대체 어떻게 해야할까요?

파이썬 튜토리얼을 살펴보시면 직접 알아내실 수도 있는데…

 

힌트라도 드릴까요?

리스트에서 맨 마지막 원소의 인덱스는 –1이랍니다.

그게 무슨 말이징…

 

한 번 도전해보세요.

성공하신 분은 파이썬을 만든 분의 이름을 보실 수 있을 거예요~

 

That's all, folks!

------------------

 

 

--Guido van Rossum (home page: http://www.python.org/~guido/)

 

 

将把此主题..