본문 바로가기
Python/왕초보를 위한 파이썬

6.2. 한 줄 씩 다루기

by 가므자 2012. 4. 4.

지난 시간에 이어 오늘도 텍스트 파일을 괴롭혀 보겠습니다. 오늘은 한 줄 씩 난도질을… --+

파일을 처음부터 끝까지 읽을 땐 read()를 썼죠? 한 줄 씩 읽을 때는 readline()을 사용하시면 됩니다. 제발 좀 읽어달라고 울부짖는 readme 파일을 한 번 읽어줄까요?

>>> f = open('C:\\Python27\\readme.txt')
>>> f.readline()
'This is Python version 2.7.1\n'
>>> f.readline()
'============================\n'

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

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

>>> f = open('C:\\Python27\\readme.txt')
>>> for x in range(5):
...     line = f.readline()
...     print line,
...
This is Python version 2.7.1
============================

Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Python Software Foundation.

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

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

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

>>> f = open('C:\\Python27\\readme.txt')
>>> lines = f.readlines()
>>> import sys
>>> sys.stdout.writelines(lines[:5])
This is Python version 2.7.1
============================

Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Python Software Foundation.

여기서는 readline()이 아니라 readlines()를 사용했습니다. s 자가 더 붙었죠? readlines()로 파일을 읽으면 한 줄, 한 줄이 각각 리스트의 원소로 들어갑니다. 파일 전체가 lines라는 리스트에 쏙 담기는 거죠. 그 다음엔 sys 모듈을 이용해서 lines에 들어있는 것들을 입맛대로 꺼내실 수 있습니다.

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

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


License information
-------------------

>>>

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

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

대체 어떻게 해야할까요? 파이썬 튜토리얼을 살펴보시면 직접 알아내실 수도 있는데…

힌트라도 드릴까요?

리스트에서 맨 마지막 원소의 인덱스는 –1이랍니다. 그게 무슨 말이징…

한 번 도전해보세요. 성공하신 분은 파이썬을 만든 분의 이름을 보실 수 있을 거예요~

>>> sys.stdout.writelines(lines[___])
That's all, folks!
------------------


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

'Python > 왕초보를 위한 파이썬' 카테고리의 다른 글

07. 객체지향  (0) 2012.04.06
6.3. 파일을 입맛대로  (0) 2012.04.04
6.1. 파일 입출력  (0) 2012.04.04
5.4. 무작위(Random) 뭉치  (0) 2012.04.04
5.3. 여러가지 뭉치  (0) 2012.04.04

댓글