본 글은 제가 Python 을 공부하며 알게 된 내용을 정리하기 위해 작성하였습니다. 생략된 부분이 많고, Python 의 특징을 다른 언어들과 비교하는 방식으로 기술하기도 하므로, 처음 프로그래밍을 접하는 분에게는 적합한 글이 아닐 수 있습니다.


체계적으로 Python 을 학습하고자 하는 분은 점프 투 파이썬 | 박응용 을 참고하기 바랍니다. 프로그래밍을 처음 접하는 사람들을 위해 쓴 책으로, 링크된 사이트에서 책의 내용 전부를 볼 수 있습니다. 현재 e-book 으로도 판매중입니다. 초보 학습자를 위한 강추 Python(Python) 링크 | 잉고래 의 링크도 도움이 될 것입니다.


다른 언어를 학습한 경험이 있는 분에게는 빠르게 활용하는 파이썬 3.2 프로그래밍 | 신호철, 우상정, 최동진을 권합니다. 풍부한 예제와 함께 중요 내용을 간결하게 담아낸 좋은 책입니다.


아래 내용의 출처는 위에서 소개한 두 권의 도서와, 파이썬 공식 홈페이지의 문서들 입니다.

표준 입출력

사용자 입력을 받을 때에는 input() 을 사용 합니다. input() 에 전달되는 parameter 는 prompt 가 됩니다. input 의 입력 결과는 문자열입니다.


str = input("내용을 입력하세요.\n")
print("입력한 내용 : " + str)


print() 사용시 (다음 줄이 아니라) 한 줄에 연이어서 출력하고 싶다면 end parameter 를 이용하여 끝문자를 지정합니다.


for i in range(10):
     print(i, end=" ")


% 를 사용하여 출력할 수도 있습니다.


print("%d/%d=%.2f" % (1,2,1/2))   # 1/2=0.50 출력


.2f 는 소수점 이하 둘째 자리 까지 출력하라는 뜻입니다. 여기에 %d 를 적으면 0 이 출력 됩니다.(소수점 이하 버림) % 뒤쪽에 여러 숫자가 올 때에는 tutle 로 표기 합니다.(list 안됨)

텍스트 파일 입출력

파일 열기(없으면 생성) : open("파일이름", "파일열기모드")

  파일열기 모드

  - t : 텍스트(디폴트)

    b : 바이너리모드

  - r : 읽기(디폴트)

    w : 쓰기

    a : 이어쓰기(파일의 마지막 부분에 내용을 덧붙임)

    + : 읽기&쓰기


f = open("test.txt", "w")
for i in range(10):
     f.write("테스트중:%d\n" % i)    # 테스트중:0 ~ 테스트중:9 까지 출력
f.close()

1행 : 참고로 notepad++ 에서 run(F5) 로 프로그램을 실행할 때, "C:\Python33\workspace\test.txt" 파일의 절대경로를 적지 않고 ,위 예제처럼 "test.txt" 만 입력하여 실행하면 Python33\workspace 폴더가 아니라 Notepad++ 폴더에 파일이 생성 됩니다.


3행 : print() 함수와 달리, write() 함수 줄 끝에는 개행문자('\n') 이 자동입력되지 않습니다. 인터프리터 창에서는 write() 함수 수행시 몇 바이트나 썼는지를 정수로 표시 해 줍니다.

파일을 읽는 방법

f.readline() : 한 줄 읽기

f.readlines() : 모든 줄을 읽어서 한 줄 단위로 구분된 리스트로 반환

f.read() : 모든 문자열 읽기

파일 포인터

f.tell() : 현재 파일 포인터의 위치 반환

f.seek(p) : 파일 포인터의 위치를 p 로 이동


f = open("test.txt", "r")

str = f.read()
print(str)

f.seek(0)   # 파일 포인터의 위치를 0으로 이동

while(1):
     l = f.readline()
     if(l):     # 읽어낸 line 이 있는 경우
          print(l)
     else:
          break

f.seek(0)   # 파일 포인터의 위치를 0으로 이동

ls = f.readlines()
print(ls)
print(ls[3][2])   # 세번째 줄의 index 가 2인 문자를 print
print(f.tell())    # readlines() 는 모든 line 을 한 번에 읽어오므로 파일의 마지막 위치를 print 하게 된다.

f.close()

6, 15행 : 파일 포인터가 파일의 마지막에 위치한 상태이므로 파일 포인터를 0 에 위치시킵니다.

이진 파일 입출력

이진 파일은 파일열기모드 에 b 를 붙입니다. 아래는 test.jpg 파일의 이미지를 복사하여 copied.jpg 파일에 붙여넣는 소스코드 입니다.


cpdFile = open("copied.jpg", "wb")

with open("test.jpg", "rb") as f:
     cpdFile.write(f.read())

cpdFile.close()

3행 : with 구문을 이용하여 파일을 열면 with 문을 벗어날 때 자동으로 파일을 닫습니다. 따라서 f.close() 를 할 필요가 없습니다.


Python 의 객체를 입축력 할 때에는 pickle 모듈을 이용 합니다. pickle 모듈 사용시에는 바이너리 모드로 파일을 열어야 합니다.

예외 처리

아래는 예외 처리의 예시입니다. 여기서 사용자 정의 예외는 나눗셈의 피제수(나누어지는 대상)가 0 인 경우에 해당합니다.


class ZeroException(Exception):     # 사용자 정의 예외
     def __init__(self, b):
          self.divided = b
     
def divide(a, b):
     if(a == 0):     # 피제수가 0 인 경우 예외를 발생시킴
          raise ZeroException(b)   # 해당 예외를 발생시킴

     return a/b


try:
     a = input("피제수 : ")
     b = input("제수 : ")
     print(divide(int(a),int(b)))

except ZeroException as e:
     print("\n피제수가 0입니다.")
     print("제수 : %d\n" % e.divided)   # 예외 클레스의 정보를 출력
     
     raise     # 단순히 raise 키워드만 있는 경우, 발생된 예외를 상위로 전달함.

except(ZeroDivisionError, TypeError) as e:   # 여러 가지 예외를 한 번에 처리
     print("\nZeroDivisionError 또는 TypeError 발생\n")
     print(e)

except Exception as e:
     print("\n예외 발생\n")
     print(e)

else:   # 예외가 발생하지 않은 경우
     print("\n예외 없이 try 문이 끝났습니다.\n")

finally:   # try-except 문이 끝난 경우. 예외 발생 여부와 관계 없이 실행된다.
     print("\n어쨌거나 try 문이 끝났습니다.\n")


이상으로 파이썬 입출력과 예외처리에 대한 기본 내용을 정리 해 보았습니다.

도움이 되었기를 바랍니다.