Python

파이썬의 표준 입출력 완전 정복

코딩 코디네이터 2025. 4. 11. 14:14
반응형

파이썬의 표준 입출력 완전 정복 📘

당신의 코드는 왜 입력받는 데에 버벅일까요?
혹시 input()이랑 print()만 알고 있다면,
지금이 바로 더 깊이 있게 배워야 할 타이밍입니다!

 

 

안녕하세요, 여러분 😊

파이썬을 배우다 보면 가장 처음 접하는 것 중 하나가 바로 "표준 입출력"이죠.

그런데 단순히 입력을 받는 input() 함수, 출력하는 print() 함수만 알고 계시다면, 아직 파이썬의 진짜 매력을 다 맛본 게 아닙니다.

오늘은 우리가 일상적으로 마주치는 사용자 입출력, 그리고 파일을 읽고 쓰는 다양한 방법까지 낱낱이 파헤쳐 볼 거예요.

특히 입출력에서 발생할 수 있는 오류 처리 방법과 with 문을 활용한 파일 핸들링까지 꼭 필요한 예제 중심으로 소개해드릴게요.

그럼, 같이 출발해볼까요?

1. 사용자 입력 처리하기: input 함수 제대로 쓰기 ✍️

파이썬을 배우면서 가장 먼저 만나는 함수 중 하나가 바로 input()입니다.

우리가 키보드로 입력한 값을 프로그램이 받아들일 수 있게 해주는 함수죠.

그런데 이 단순한 함수, 알고 보면 꽤 많은 기능을 할 수 있다는 거 아셨나요? 😲

input 함수의 기본 구조 🧱

input() 함수는 사용자의 키보드 입력을 받아서 문자열(str) 형태로 반환해줍니다.

아무리 숫자를 입력해도, 파이썬은 그것을 문자로 인식한다는 점!

그래서 입력값을 숫자로 활용하고 싶다면 꼭 int()float() 같은 형 변환이 필요해요.

name = input("당신의 이름은? ")
print("안녕하세요,", name, "님!")

위 코드를 실행하면 콘솔에 "당신의 이름은?"이라는 문구가 먼저 나오고, 사용자가 입력을 하면 그 값을 받아 출력해줍니다.

아주 기본적인 흐름이지만, 이걸 잘 다루면 대화형 프로그램도 얼마든지 만들 수 있어요!

숫자를 입력받을 때 주의할 점 ⚠️

age = input("당신의 나이는? ")
print(age + 1)  # 오류 발생!

위 코드는 실행하면 에러가 납니다. 왜일까요? 🤔

바로 input()은 문자열을 반환하기 때문이죠.

숫자 연산을 하려면 int()로 형을 바꿔줘야 해요.

age = int(input("당신의 나이는? "))
print(age + 1)

이제야 원하는 숫자 연산이 가능해졌네요!

이처럼 입력값이 문자열이라는 사실을 꼭 기억하고, 상황에 맞게 형 변환을 해주는 습관을 들이세요.

여러 값 입력받기: split() 활용 💡

하나의 입력줄에 여러 값을 넣고 싶다면 split() 메서드를 사용하면 돼요.

예를 들어 이름과 나이를 동시에 입력받고 싶을 때 이렇게 쓸 수 있어요:

name, age = input("이름과 나이를 입력하세요 (띄어쓰기로 구분): ").split()
print(name, "님은", age, "살이군요!")

이 방식은 공백으로 구분된 값을 각각 나누어 변수에 저장할 수 있어요.

단, 입력값 개수가 변수 개수와 꼭 맞아야 한다는 점은 주의!

map 함수로 숫자 입력 변환까지 한 번에 처리하기

a, b = map(int, input("두 정수를 입력하세요: ").split())
print("합:", a + b)

이 코드처럼 map()을 사용하면 입력된 문자열을 숫자로 바로 변환할 수 있어요.

간단하면서도 강력한 한 줄짜리 코드죠!

input 함수 사용 시 체크포인트 ✅

  • 모든 입력은 기본적으로 문자열로 처리됨
  • 숫자 처리 시에는 형변환 필수: int(), float()
  • 여러 값 입력은 split()과 map() 조합으로 깔끔하게 처리

이제 input() 함수 하나만으로도 꽤 많은 작업을 할 수 있겠죠?

다음은 print 함수를 활용해 어떻게 출력을 다양하게 꾸밀 수 있는지 알아볼 거예요.

 

이어서 계속 가볼까요?

 

 

2. 출력의 모든 것: print 함수의 활용법 🖨️

print() 함수는 파이썬에서 데이터를 화면에 출력할 때 가장 많이 사용하는 함수입니다.

단순히 문자열을 출력하는 데만 쓰는 줄 아셨다면… 아직 진짜 잠재력을 모르시는 거예요!

오늘은 줄 바꿈 조절부터 포맷팅, 여러 값 출력까지 print 함수의 다양한 기능들을 낱낱이 파헤쳐볼게요 🕵️‍♀️

기본 사용법: 문자열과 변수 출력하기

name = "지민"
print("안녕하세요,", name, "님!")

print()는 기본적으로 여러 값을 쉼표(,)로 나열하면 자동으로 한 칸씩 띄워서 출력해 줍니다.

편리하긴 하지만, 복잡한 출력 결과를 만들기엔 조금 부족할 수도 있어요.

줄 바꿈 없이 출력하고 싶을 땐? end 매개변수!

print()는 기본적으로 출력한 후 줄 바꿈(\n)을 포함합니다.

하지만 때로는 같은 줄에 여러 출력을 하고 싶을 때가 있죠?

그럴 땐 end 매개변수를 사용해보세요.

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

결과는 이렇게 나와요: 0 1 2 3 4.

줄 바꿈 없이 공백 한 칸을 사이에 두고 출력되었죠?

end=의 기본값은 '\n'이지만, 이를 원하는 값으로 바꿔서 출력 형식을 자유롭게 제어할 수 있습니다.

문자열 포맷팅: 깔끔하게 출력하자 💬

print 함수에서 가장 많이 쓰이는 고급 기능이 바로 문자열 포맷팅이에요.

숫자나 문자열을 보기 좋게 출력하려면 아래 방식들을 활용해보세요!

1. f-string (파이썬 3.6 이상)

name = "민수"
age = 24
print(f"{name}님의 나이는 {age}살입니다.")

2. format() 메서드

print("{}님의 나이는 {}살입니다.".format(name, age))

3. % 연산자 방식

print("%s님의 나이는 %d살입니다." % (name, age))

요즘에는 f-string이 가장 많이 쓰이지만, 다양한 포맷을 이해해두면 유지보수할 때 큰 도움이 되죠.

특히 format()은 정렬, 자리수 지정에도 유리하답니다!

print 함수의 다양한 매개변수

매개변수 설명 예시
sep 값들 사이에 출력할 문자 지정 print("2025", "04", "09", sep="-")
end 출력 후 붙을 문자열 지정 print("Hello", end="🌟")
file 출력 대상을 파일로 지정 print("저장", file=f)

이처럼 print 함수는 단순한 출력 도구가 아니라 다양한 형식의 메시지를 효과적으로 전달할 수 있는 강력한 도구입니다.

CLI 기반 프로그램을 만든다면 이 함수 하나만으로도 사용자의 마음을 사로잡을 수 있어요 😉

 

 

3. 텍스트 파일에 쓰기: write와 open 함수 📝

파이썬으로 코딩을 하다 보면 사용자에게 결과를 보여주는 것뿐만 아니라, 그 결과를 파일로 저장하고 싶은 경우가 정말 많습니다.

예를 들면

로그 기록, 설문 결과, 사용자 응답 저장 같은 거요.

그럴 때 사용하는 게 바로 open() 함수와 write() 메서드입니다.

오늘은 이 두 가지를 가지고 텍스트 파일을 어떻게 다루는지 깔끔하게 정리해드릴게요!

open() 함수로 파일 열기 🗂️

파일에 뭔가를 쓰기 위해서는 먼저 파일을 열어야 합니다.

이때 사용하는 함수가 open()이고, 모드를 잘 지정해야 원하는 동작이 가능해요.

파일 모드 설명
"w" 쓰기 모드. 파일이 없으면 새로 만들고, 있으면 기존 내용을 덮어씀
"a" 추가 모드. 기존 파일의 끝에 내용을 덧붙임
"x" 배타적 생성 모드. 파일이 존재하면 오류 발생
f = open("my_log.txt", "w")

위 코드는 my_log.txt라는 파일을 새로 만들거나 기존 내용을 삭제하고 새로 시작합니다.

조심해야겠죠? 데이터를 덮어쓰니까요!

write()로 내용 쓰기 ✍️

파일을 열었으면, 이제 그 안에 내용을 써야죠.

이때 사용하는 게 write() 메서드입니다.

문자열 형태만 쓸 수 있고, 숫자나 리스트는 형 변환을 해야 합니다.

f = open("log.txt", "w")
f.write("첫 번째 로그입니다.\n")
f.write("두 번째 로그입니다.\n")
f.close()

\n은 줄 바꿈을 의미합니다.

write()는 자동 줄바꿈이 없기 때문에 꼭 직접 줄 바꿈 문자를 넣어줘야 해요.

숫자나 리스트를 쓰고 싶을 땐?

score = 100
f.write(str(score) + "\n")

문자열로 바꾼 후에 써야 에러가 나지 않습니다.

str(), join() 등을 적극 활용해 보세요.

write 사용 시 주의할 점 ⚠️

  • write는 문자열만 처리 가능 – 숫자는 str()로 변환
  • 자동 줄바꿈 없음\n을 직접 삽입해야 줄이 나뉨
  • 파일은 꼭 닫기f.close() 또는 with 문 활용

이제 write와 open을 이용해 원하는 데이터를 텍스트 파일로 출력하는 건 문제없겠죠?

다음 단계에서는 반대로 파일을 읽는 방법을 배워볼 차례입니다.

한 줄씩 읽기부터 전체 읽기까지, 실제로 많이 쓰이는 테크닉들을 하나씩 소개해드릴게요!

 

 

4. 텍스트 파일 읽기: readline, readlines, read 차이점 📄

자, 지난 시간에는 우리가 파일에 데이터를 쓰는 방법에 대해 배웠죠?

그렇다면 이번에는 반대로 텍스트 파일에서 데이터를 읽는 법에 대해 이야기해볼게요.

실제 현업이나 실습 중에는 기존에 저장된 데이터를 다시 불러와서 분석하거나 조건에 따라 처리해야 할 때가 많아요.

이럴 때 자주 쓰이는 방법이 바로 readline(), readlines(), read()입니다.

readline(): 한 줄씩 읽기 🧾

readline() 함수는 파일에서 한 줄씩 차례대로 읽어옵니다.

반복문과 함께 자주 사용되며, 메모리를 적게 사용해서 대용량 파일 처리에 유리해요.

f = open("log.txt", "r")
while True:
    line = f.readline()
    if not line:
        break
    print(line, end='')
f.close()

end=''print()의 자동 줄 바꿈을 막기 위해 넣은 거예요.

파일 자체에 줄바꿈이 포함되어 있기 때문에 중복 줄바꿈을 피하려는 의도랍니다.

readlines(): 전체 줄을 리스트로 가져오기 📋

readlines()는 파일의 모든 줄을 한꺼번에 읽어서 리스트로 반환합니다.

각 줄은 리스트의 요소가 되고, \n도 포함되어 있어요.

f = open("log.txt", "r")
lines = f.readlines()
for line in lines:
    print(line, end='')
f.close()

파일 전체를 메모리에 올리기 때문에 작은 파일에 적합하며, 각 줄을 배열처럼 다루고 싶을 때 유용해요.

read(): 파일 전체를 하나의 문자열로 읽기 📜

read()는 파일 전체를 하나의 문자열로 읽어옵니다.

텍스트 분석, 웹 크롤링 후 가공 등에 많이 사용돼요.

f = open("log.txt", "r")
data = f.read()
print(data)
f.close()

모든 줄이 하나의 문자열에 포함되므로 줄 단위로 처리하려면 splitlines()split("\n")을 써야 해요.

📊 함수별 비교표

함수 동작 방식 적합한 상황
readline() 한 줄씩 읽음 대용량 파일
readlines() 전체 줄을 리스트로 작은 파일, 리스트 처리
read() 전체 내용을 문자열로 문자열 가공, 정규표현식

세 가지 방법을 잘 이해하면 상황에 맞게 효율적인 파일 처리가 가능해져요.

다음 섹션에서는 파일을 열고 닫는 과정을 더 안전하게 다룰 수 있는 with 문에 대해 설명해드릴게요.

지금까지 배운 내용보다 더 깔끔한 코드, 기대되시죠? 😊

 

 

5. 파일 다룰 때 꼭 써야 할 with 문 📂

이전 단계들에서 open()으로 파일을 열고, read()write()로 읽고 쓰고, 마지막에 f.close()로 파일을 닫는 흐름을 배웠죠?

그런데 혹시라도 파일을 열었는데 닫는 걸 깜빡하거나, 중간에 오류가 발생해서 close()가 실행되지 않았다면 어떻게 될까요? 😨

바로 메모리 누수, 리소스 낭비 같은 문제가 생기게 됩니다.

이 문제를 깔끔하게 해결해주는 도구가 바로 with 문이에요.

파이썬에서는 Context Manager라는 기능을 통해 특정 작업이 끝나면 자동으로 정리(clean-up)를 해주는 구조를 제공하는데, 파일 처리에서는 거의 무조건 with open()을 사용하는 것이 좋습니다.

with 문 기본 구조

with open("log.txt", "r") as f:
    data = f.read()
    print(data)

with open(...) as 변수: 형태로 작성하면, with 블록이 끝나는 시점에서 자동으로 close()가 호출됩니다.

더 이상 f.close()를 직접 쓰지 않아도 된다는 거죠!

with 문으로 파일 쓰기 예시

with open("output.txt", "w") as f:
    f.write("파이썬은 정말 재밌어요!\n")
    f.write("with 문 너무 편하다...\n")

위처럼 파일을 쓰는 작업도 간단하게 처리할 수 있습니다.

코드도 깔끔해지고, 실수할 여지도 줄어들죠.

with 문으로 한 줄씩 파일 읽기

with open("log.txt", "r") as f:
    for line in f:
        print(line, end='')

놀랍게도 파일 객체 자체가 반복 가능한 구조이기 때문에 for 문과 함께 쓰면 자동으로 줄 단위 읽기가 가능합니다.

이 방식은 readline()보다 더 간단하고 안전한 패턴으로, 가장 권장되는 형태예요.

파일 쓰기와 예외 처리를 함께 쓰고 싶다면?

with 문은 try-except 구문과도 잘 어울립니다.

예외가 발생하더라도 파일이 자동으로 닫히기 때문에 코드 안정성을 높일 수 있어요.

try:
    with open("log.txt", "r") as f:
        print(f.read())
except FileNotFoundError:
    print("파일이 존재하지 않아요 😥")

with 문 사용 시 장점 요약 ✨

  • 자동으로 파일을 닫아줌 – close()를 깜빡해도 OK!
  • 코드 가독성 향상 – 들여쓰기 구조가 명확해짐
  • 에러 발생에도 안전함 – 자원 누수 방지

이제 여러분도 자신 있게 with open()을 사용할 수 있겠죠? 😎

 

다음 단계에서는 마지막으로 파일 입출력 중 발생할 수 있는 예외 처리에 대해 소개할게요.

정말 자주 마주치는 오류들, 어떻게 깔끔하게 넘기는지 알려드릴게요!

 

 

6. 파일 입출력 중 발생할 수 있는 예외 처리법 ⚠️

현실은 늘 그렇죠.

코드가 잘 작동하리라는 믿음은 좋지만, 언제든 오류는 발생할 수 있어요.

특히 파일을 다룰 때는 파일이 존재하지 않거나, 권한이 없거나, 파일이 이미 열려 있거나…

이런 문제가 수두룩하죠.

그래서 꼭 필요한 게 바로 예외 처리입니다!

try-except 문으로 오류 막기 🛡️

예외 처리의 기본은 try-except 구문입니다.

파일을 열거나 쓸 때 문제가 발생해도 프로그램이 강제 종료되지 않도록 막아주는 거죠.

try:
    with open("user_info.txt", "r") as f:
        print(f.read())
except FileNotFoundError:
    print("파일을 찾을 수 없습니다 😢")

위 예시는 가장 자주 쓰이는 FileNotFoundError를 처리한 예입니다.

사용자가 없는 파일명을 입력할 수도 있잖아요?

finally 문: 무조건 실행되는 블록 💡

try:
    f = open("log.txt", "r")
    print(f.read())
except:
    print("에러 발생!")
finally:
    f.close()
    print("파일을 닫았습니다.")

finally는 예외 발생 여부와 관계없이 실행돼요.

자원을 정리할 때 아주 유용하죠. 특히 직접 close()를 사용할 때 이 구조가 유용합니다.

다양한 예외 처리 팁 모음 ✨

  • FileNotFoundError – 파일이 존재하지 않을 때
  • PermissionError – 쓰기/읽기 권한 없을 때
  • IsADirectoryError – 디렉터리를 파일처럼 열었을 때

예외를 정확하게 구분해서 처리하면 사용자에게 친절한 메시지를 줄 수 있고, 프로그램도 더 안정적이 됩니다. 게다가 예외 메시지를 로그로 저장하면 디버깅에도 큰 도움이 되죠!

 

 


마무리 🧩

자, 여기까지 따라오신 여러분! 👏

이제 파이썬의 표준 입출력에 대해 완전히 정복하셨다고 해도 과언이 아닙니다.

input(), print()부터 시작해서 open(), with 문, 파일 읽기/쓰기, 그리고 예외 처리까지.

이 모든 흐름을 익히면 단순한 텍스트 기반 프로그램부터 데이터 로깅, 사용자 응답 시스템까지 얼마든지 만들 수 있어요.

 

궁금하시다면 블로그 구독과 댓글, 좋아요도 부탁드려요! 😊

반응형