(Python) len 트레이스 백, .rstrip의 오류

조회수 1154회
name = input ('Enter file name: ')
if len(name) > 1 :
    name = 'mbox-short.txt'
filename = open(name)

for line in filename :
    if 'From ' in line :
        print(line.rstrip)

    else :
        continue


print(filename)


(1)

문서 내 이메일을 걸러내는 코드를 코세라를 통해 연습 중입니다. 일일히 파일명을 치기 귀찮아 코세라 교수님께서도 사용하시던 len 코드를 사용했는데요, 어째서인지 같은 파일명인데 4번째 줄인 변수에서 트레이스백이 일어나면서 파일, 디렉토리를 찾지 못했다는 메세지가 뜨고 있습니다. 파일명을 잘못 입력한 것도 아닌데 이런 문제가 일어나는 이유는 무엇인가요? 제가 무엇을 잘못하고 있는건가요?

(2)

.rstrip을 사용하지 않았을 때는 문제없이 단어들을 찾아내 출력하는데, 어째서인지 .rstrip을 넣으면 built-in method rstrip of str object at 0x03DSEA88로 값이 바뀌어 출력이 되고 있습니다. 또 원하는 값을 얻든. 못얻든, <_io.TextIOWrapper name='mbox-short.txt' mode='r' encoding='cp1252'> 이란 메세지가 마지막에 출력되는데 이 메세지들을 없애고 제가 얻으려는 값을 얻으려면 어떻게 해야하나요? 무엇이 문제가 되어 이런 문제가 일어나고 있는건가요?

조언 부탁드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • (1)

    백트레이스도 같이 올려주셨으면 좋을 것 같습니다.

    트레이스백이 일어나면서 파일, 디렉토리를 찾지 못했다는 메세지가 뜨고 있습니다.라고 말씀하시는 것을 보면 filename = open(name)에서 예외가 발생한 것으로 보입니다. open()은 입력 받은 경로에 파일이 없을 경우 IOError예외를 발생 시킵니다. 이를 try~except를 통해 받지 않으면 프로그램이 종료되고 트레이스백 이 출력되게 됩니다.

    만약 name인 파일을 생성하는 것이 목적이라면, 아래와 같이 모드를 설정해 주셔야합니다.

    filename = open(name, "w")
    

    (2)

    rstrip은 함수 입니다. 따라서 rstrip() 처럼 괄호로 열고 닫아야 호출됩니다. 그러니 print(line.rstrip()) 와 같이 수정해 보세요.

    그리고 print(filename)에서 <_io.TextIOWrapper name='mbox-short.txt' mode='r' encoding='cp1252'>이 출려되는 이유는 filename = open(name)을 통해 filename이 파일 객체가 되었기 때문입니다. 업애고자 하시면 당연히 이 출력 코드를 지우시면 됩니다.

    • 해결되었습니다. 컴퓨터라는게 유도리가 통하지 않는다고 해야하나, 반드시 입력한 것만 출력하는게 어려우면서도 즐겁네요. 조언 감사드립니다 : ) 알 수 없는 사용자 2018.10.15 20:36

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)