본 강좌에서는 파이썬의 입출력(I/O) 시스템에 대해서 자세히 다룹니다. 입출력은 데이터의 흐름을 제어하는데 중요한 역할을 하며, 사용자와 프로그램 간의 상호작용뿐만 아니라 파일 시스템과의 연결을 가능하게 합니다. 이 장에서는 기본적인 콘솔 입출력 방법부터 파일을 다루는 방법, 예외 처리에 이르기까지 파이썬의 다양한 입출력 메커니즘을 다룰 것입니다.
1. 콘솔 입출력
1.1 print() 함수
파이썬에서 콘솔에 출력을 하기 위해 가장 많이 사용되는 함수는 print()
함수입니다. 이 함수는 다양한 형식의 데이터를 표준 출력 장치에 출력할 수 있도록 해줍니다.
print("Hello, World!")
위의 코드는 콘솔에 “Hello, World!”를 출력합니다. print()
함수는 여러 인자를 받을 수 있으며, 기본적으로 인자들 사이에 공백을 추가하여 출력합니다.
print("Hello,", "Python!")
위의 코드는 “Hello, Python!”을 출력합니다. print()
함수는 기본 인쇄 방식을 쉽게 커스터마이즈 할 수 있는 옵션을 제공합니다. 예를 들어, 출력 사이의 구분자와 출력의 끝을 변경할 수 있습니다.
print("Python", "Programming", sep="-", end="!")
위의 코드는 “Python-Programming!”을 출력합니다. sep
은 출력 사이의 구분자를, end
는 출력 끝에 덧붙일 문자열을 지정할 수 있도록 해줍니다.
1.2 input() 함수
input()
함수는 표준 입력 장치로부터 사용자 입력을 받을 때 사용됩니다. 사용자가 콘솔에 입력한 문자열은 input()
함수가 종료될 때 반환됩니다. 기본적으로 모든 입력은 문자열 형식으로 받아집니다.
name = input("Enter your name: ")
print("Hello,", name)
위 코드는 사용자에게 이름을 입력받고, 입력받은 이름을 이용하여 인사말을 출력합니다. 입력받은 데이터가 숫자형으로 사용되어야 할 경우 int()
또는 float()
함수를 사용하여 형 변환을 해주어야 합니다.
age = int(input("Enter your age: "))
print("You are", age, "years old.")
위 코드는 연령을 입력받고, 정수형으로 변환하여 사용합니다.
2. 파일 입출력
2.1 파일 열기
파일을 여는 방법은 open()
함수를 사용하는 것입니다. open()
함수는 파일의 이름과 모드를 인자로 받습니다. 주요 모드들은 다음과 같습니다:
'r'
: 읽기용 모드'w'
: 쓰기용 모드 (기존 파일 내용 삭제)'a'
: 추가 모드 (기존 내용 유지, 새로운 내용 추가)'b'
: 이진 모드(바이너리 파일 읽기/쓰기)
파일을 열면 파일 객체가 생성되며, 이 객체를 통해 파일 조작을 할 수 있습니다. 일반적으로 파일 처리가 끝난 후에는 close()
메서드를 호출하여 파일을 닫아야 합니다. 이는 리소스를 해제하고 데이터가 손실되지 않도록 합니다.
file = open("example.txt", 'r')
content = file.read()
print(content)
file.close()
위 코드는 example.txt
파일을 읽기 모드로 열고, 파일 내용을 읽어서 출력합니다. 마지막으로 close()
메서드를 사용하여 파일을 닫습니다.
2.2 파일 읽기
파일의 내용을 읽는 방법에는 여러 가지가 있으며, 다음은 주로 사용하는 메서드들입니다:
read()
: 파일 전체 내용을 하나의 문자열로 읽습니다.readline()
: 파일의 한 줄을 읽습니다. 줄 바꿈 문자도 포함됩니다.readlines()
: 파일의 각 줄을 요소로 가지는 리스트를 반환합니다.
file = open("example.txt", 'r')
line = file.readline()
while line:
print(line, end='')
line = file.readline()
file.close()
위 코드는 파일을 줄 단위로 읽어서 출력합니다. while
루프를 통해 파일의 끝에 도달할 때까지 각 줄을 읽어들입니다. 줄바꿈 문자가 포함되기 때문에 print()
함수의 end
파라미터를 빈 문자열로 설정하였습니다.
2.3 파일 쓰기
파일에 데이터를 쓰기 위해서는 파일을 ‘w’ 또는 ‘a’ 모드로 열어야 합니다. ‘w’ 모드는 파일의 내용을 덮어쓰고, ‘a’ 모드는 기존 파일의 끝에 내용을 추가합니다.
file = open("example.txt", 'w')
file.write("This is a new line.\n")
file.write("Writing to files is easy.\n")
file.close()
위 코드는 기존 파일의 내용을 지우고 새로운 줄을 두 개 추가합니다. 파일을 쓸 때는 write()
메서드를 사용하며, 줄 바꿈을 위해 명시적으로 ‘\n’을 포함하고 있습니다.
2.4 with 문을 사용한 파일 입출력
파일 입출력 시 with
문을 사용하면 코드가 더 간결해지고, 파일을 자동으로 닫아주기 때문에 실수를 방지할 수 있습니다.
with open("example.txt", 'r') as file:
content = file.read()
print(content)
위 코드는 with
문을 사용하여 파일을 열었고, 파일이 with
블록을 벗어나면 자동으로 닫힙니다. 이는 close()
메서드를 명시적으로 호출할 필요가 없다는 장점을 제공합니다.
3. 파일 모드와 바이너리 파일
텍스트 파일과 달리 바이너리 파일은 ‘b’ 모드를 사용하여 읽기와 쓰기를 수행해야 합니다. 이는 이미지, 오디오, 비디오 파일처럼 바이너리 데이터의 조작에 사용됩니다.
with open("image.jpg", 'rb') as binary_file:
binary_content = binary_file.read()
위 코드는 이미지 파일을 바이너리 모드로 열고 내용을 읽어들입니다. 마찬가지로 파일 쓰기에는 ‘wb’ 모드를 사용합니다.
4. 예외 처리
파일을 다룰 때는 다양한 예외 상황이 발생할 수 있습니다. 예를 들어, 파일이 존재하지 않거나 읽기 권한이 없는 경우입니다. 이러한 예외를 처리하여 프로그램의 비정상적인 종료를 방지할 수 있습니다.
try:
file = open("nonexistent_file.txt", 'r')
except FileNotFoundError:
print("The file does not exist.")
finally:
file.close()
위 코드는 파일이 존재하지 않을 경우 FileNotFoundError
를 처리하여 사용자에게 파일이 없음을 알립니다. finally
블록은 예외 발생 여부에 관계없이 실행되며, 필요하다면 리소스를 정리하는 곳입니다.
with
문을 사용하는 경우 파일 닫기가 자동으로 처리되므로, 예외 처리가 조금 더 간단해질 수 있습니다.
마무리
이번 장에서는 파이썬의 입출력에 대한 다양한 방법을 다루었습니다. 콘솔 입출력과 파일 입출력의 기초부터, 예외 처리 방법에 이르기까지 파이썬을 통해 어떻게 데이터를 효과적으로 입력하고 출력할 수 있는지를 배웠습니다. 실제로 이러한 입출력 기능은 거의 모든 파이썬 프로그램에서 중요한 부분을 다루고 있기 때문에 더 많은 연습과 활용이 필요합니다.
앞으로의 강좌에서는 더욱 심화된 주제를 다룰 예정이니, 본 장의 내용을 충분히 이해하고 연습해 두세요.