파일을 읽고 쓰는 일은 생각보다 자주 하게 됩니다. 이번 시간에는 파이썬으로 텍스트 파일을 읽는 법에 대해서 간단하게 다뤄보겠습니다.

 


 in1.txt에는 이런 내용이 저장되어 있어요. 우리의 목표는, 파일에 저장되어 있는 내용을 그대로 출력하는 것이 목표입니다. 어떻게 하면 좋을까요? 우리가 알아야 할 내용은 딱 2개입니다. with open 절과, 현재 line을 iteration으로 얻어오는 것. 먼저 with open 절은 저 같은 경우 아래와 같이 많이 씁니다.

 

 

 보통, 저는 파일 객체를 다룰 때 f라고 많이 합니다. 요래 하면, file_name을 file_open_mode로 엽니다. 파일의 모드는 'r', 'w' 등이 있을 겁니다. 여기에서는 읽기 모드로 연다고 했으므로, 모드를 'r' 로 하면 됩니다. 다음이 문제인데요. 저는, f를 가지고 loop를 돌리는 방법을 씁니다. 문서에서도 그러한 방법이 언급되어 있네요.

 

 

 대충 요래 작성하면, 텍스트 파일 '1.in'을 읽을 수 있습니다. 자. 이제 응용해 봅시다. 우리가 읽어야 할 파일은 in1.txt입니다. 그러면, open 함수의 1번째 인자만 바꿔주면 되겠네요.

 

 

 1번째 줄에서 'in1.txt'라고 적어줬어요. 2번째 인자가 'r'이니까, in1.txt를 읽기 모드로 연다는 소리입니다.

 

 

 실행 결과는 위와 같습니다.

 


 in2.txt를 봅시다.

 

 

 뭔가 경부선 상의 역이 많이 보이는 것은 기분 탓이 아닐 텐데요. 지스타에 처음 갔을 때 제가 탔던 열차의 정차역 목록입니다. 우리의 목표는 이 파일에 있는 내용을 읽는 것인데요. 한글이 떡하니 적혀 있어요. multi byte입니다. wide character라고 하는데요.

 

 

 이런 거는 그냥 읽어버리면 어떤 경우에는 Error를 떨궈버립니다. 십중 팔구 디코딩 하려고 했는데, 인코딩이 이상하게 되어 있을 때 입니다. 즉, 쌍이 맞지 않을 때 에러가 많이 납니다. 이게 무슨 말인가? 에러 내용을 봅시다.

 

 

 'cp949' codec can't decode byte 0xec라고 되어 있는데요. cp949라는 코덱이 있어요. 그런데 이 코덱이 디코딩을 못한대요. 그러면 파일 인코딩 형식이 'cp949' codec으로 디코딩을 못 하는 것일 겁니다. 어떤 형식인지 메모장을 열어서 보겠습니다.

 

 

 밑에 보시면 UTF-8이라고 되어 있는데요. UTF-8 형식으로 인코딩이 되어 있다는 것을 의미합니다. 따라서, 인코딩이 UTF-8로 되었다는 정보를 open에다가 넘겨줘야 합니다. 이 정보가 누락이 되었다면 경우에 따라서 에러가 발생할 겁니다.

 

 

 encoding 형식이 'UTF-8'이다라는 정보를 open에다가 넘겨 주었습니다. 그리고 다시 프로그램을 실행해 볼까요?

 

 

 의도한 대로 잘 나왔음을 알 수 있어요.