본문 바로가기

Python

[파일과 예외] 데이터 가져오기


[파일과 예외] 데이터 가져오기

데이터 처리 : 입력 - 처리 - 출력

데이터를 읽으려면 open() 함수를 사용합니다.
open() 내장함수를 사용해서 파일에 있는 데이터를 접근할 때는 나열자(iterator)가 만들어져서 파일에서 코드를 한 번에 한 라인씩 데이터를 보내줍니다.

표준적인 열기 - 처리- 닫기 코드입니다.
the_file=open('hellow.txt')
# Do something with the data
# in "the_file".
the_file.close()

IDLE을 사용해서 파이썬의 파일 입력 메커니즘을 사용해 보겠습니다.


데이터를 가져왔습니다.

이 데이터는 대부분 '사람>>콜론>>대사'형식의 데이터를 가지고 있습니다.

Man : Is this the right room for an argument?
Other man : I've told you once.
.
.
.

split() 메서드를 활용해 각각 라인에서 필요에 따라 부분만 뽑아 낼 수 있습니다.

(role, line_spoken)=each_line.split(':')

split()에 의해 ''안에 든 :를 기준으로 각 라인의 '사람'과 '대사'가 분할됩니다.
데이더 맨 윗 라인을 예로들면 'Man'이라는 문자열은 role, 'Is this the right room for an argument?'문자열은 each_line에 대입됩니다.

만약 콜론이 한 라인에 두개가 들어있다면 인자를 추가해 줍니다.

(role, line_spoken)=each_line.split(':', 1)

선택적 인자에 1을 지정하면 뒤에 콜론이 있더라도 앞에있는 콜론에서 분할하여
콜론을 기점으로 두 부분으로 분할됩니다.
만약 선택적 인자를 2로 지정하면 세 부분으로 분할 되겠죠.


빨간 박스안 대화에 콜론이 있어도 선택인자를 1로 하였기 때문에 그 보다 앞에 있던 콜론을 기점으로만 분할된 것을 확인할 수 있습니다.
그런데 에러가 하나 포착되었습니다.
콜론이 없는 라인은 분할하지 못 하였기 떄문입니다.
이럴 경우 조건문을 써주십시오.

>>> data open('hellow.txt')
>>>for each_line in data:
           if not each_line.find(':')== -1:
                      (role, line_spoken)=each_line.split(':',1)
                     print(role)
                     print('said: ')
                     print(line_spoken)

-1은 find() 메서드가 문자열에서 콜론을 찾지 못했을 때 반환하는 값입니다.
if not 키워드로 인해 조건을 반대로 만들어서 -1, 즉 콜론을 같지 않으면 콜론있는 것만 콜론 기점으로 분할되어 출력되게 합니다.