파이썬의 기본 입력 메커니즘은 라인을 기반으로 합니다.
데이터를 텍스트 파일에서 프로그램으로 읽어 들이면 한 번에 한 라인씩 가져옵니다.
파이썬의 open()내장함수는 파일에 연결하기 위해 존재합니다. for문과 함께 사용하면 파일을 읽는 건 매우 간단합니다.
배우 역활 : 배우가 하는 대사
데이터를 자세히 살펴 보면 특정한 형식으로 되어있습니다. 이 형식을 잘 기억하고 계세요. 각각의 라인을 처리해서 필요에 따라 일부분만을 뽑아낼수 있습니다. split() 메서드를 활용하면 됩니다.
Man: Is this the right room for an argument?
▼
each_line.split(" : ")
▼
Man / Is this the fight room for an argument?
split()메서드는 문자열의 리스트를 반환하는데, 이스트가 대입 연산자 왼쪽의 타깃 식별자에 대입됩니다. 이것을 다중 대입이라고 합니다.
(role, line_spoken) = each_line.split(":")
여러분의 코드가 잘 돌다가 런타임 에러와 함께 크래시 되었습니다. 데이터 파일을 살펴봅시다. 위라인이 성공적으로 처리되고 난 뒤 어떤 데이터가 왔는지 알아보겠습니다.
Man: You most certainly did not 이라는 대사를 하고나서 데이터를 처리하다가 문제가 생겼습니다.
다음 대사에서 :콜론이 두개가 들어가있습니다. 한개아 아니라 두개 일때는 split()메서드는 라인을 세부분으로 나눕니다.
data = open('sketch.txt')
for each_line in data:
(role, line_spoken) = each_line.split(' :', 1)
print(role, end= '')
print(' said: ', end = '')
print(line_spoken, end= '')
data.close()
또 다른 ValueError가 나타났네요 이번에는 무엇이 잘못된 걸까요?
(pause) 라는 텍스트 파일이있네요 콜론이 없는 경우 는 어떻게 해야될까요 ?
두가지방법이있습니다. 하나는 논리를 추가하는것 하나는 에러가 생기도록 놔둔다음에 에러가 생기면 처리할 수있게한다.
첫번째로는 논리 추가하기 입니다.
>>>each_line = "I tell you, there's no such thing as a flying circus"
>>>each_line.find(":")
-1
>>>each_line = "I tell you: there's no such thing as a flying circus"
>>>each_line.find(':')
10
find()내장 함수를 사용하여 콜론이 있고 없고에 따라 인덱스 값을 반환합니다.
조건문을 이해하는데 몇초 걸릴수도 있지만, 이문장은 잘 작동합니다. not 키워드를 사용하면 조건을 반대로 만든다는 점에 유의하세요 !
이제 다른한가지방법은 오류가 나도록 납두다가 오류가 발생시 처리하는거입니다.
여기서는 try구문을 사용하게됩니다.
data = open('sketch.txt')
for each_line in data;
try:
(role, line_spoken) = each_line.split(':', 1)
print(role, end= '')
print(' said : ', end = '')
print(line_spoken, end='')
except
pass
data.close()
Try와 pass문을 함께 사용한 예입니다.
Try문은 모든 예외를 잡고나서 pass문을 이요해서 에러를 무시함으로써 예외를 처리하게 됩니다.
두가지 방법다 예외 처리할수 있습니다.
※참고사이트 : http://ji-ggu.tistory.com/entry/Python-3-예외처리
'Python' 카테고리의 다른 글
Python Test Code (0) | 2014.09.18 |
---|