데이터 엔지니어링

패스트캠퍼스 환급챌린지 44일차: 데이터엔지니어링 초격차 강의 후기

Big Byte 2025. 5. 14. 22:53

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

파이썬 💻: 세상과 소통하는 창, 사용자 입출력과 파일 다루기

 

안녕하세요, 여러분! 😊

 

지난 시간에는 datetime 모듈을 통해 파이썬으로 시간의 흐름을 다루는 방법을 배웠습니다. 🕰️ 덕분에 우리 프로그램은 현실 세계의 시간을 인지하고 그에 맞춰 동작할 수 있게 되었죠! 마치 프로그램에 정확한 스케줄 관리 능력을 부여한 것과 같아요. 🗓️ 이제 여러분의 프로그램은 시간과 관련된 작업을 더욱 정교하게 처리할 수 있을 겁니다.

 

자, 이렇게 시간 감각을 갖춘 프로그램이 이제 세상과 직접 소통하고, 중요한 정보를 기록하고 기억할 수 있다면 얼마나 멋질까요? 📢 바로 '사용자 입출력'과 '파일 처리'가 그 핵심 열쇠입니다! 사용자와 대화하고, 데이터를 파일에 저장하고 불러오는 것은 프로그램의 가장 기본적인 기능 중 하나죠. 게임 점수 저장부터, 사용자 설정 관리, 데이터 분석 결과 보관까지! 이 모든 것이 입출력 없이는 불가능합니다.

 

그래서 오늘은 파이썬을 통해 사용자와 소통하고, 파일에 데이터를 쓰고 읽는 방법을 배울 거예요! 프로그램의 활용도를 한층 높여줄 입출력의 세계로 함께 떠나봅시다! 🚀

 

오늘 함께 알아볼 내용은 다음과 같습니다:

  • 사용자로부터 입력받기: input() 함수 ⌨️
  • 화면에 정보 출력하기: print() 함수의 다양한 기능 🖥️
  • 문자열 깔끔하게 꾸미기: String Formatting (f-string 중심으로!) 🎨
  • 파일의 세계로: 파일 열고 닫기 (open(), close(), with 문) 📁
  • 새로운 파일 만들기 및 내용 쓰기 ('w' 모드) ✍️
  • 파일에서 내용 읽어오기 ('r' 모드, read(), readline(), readlines()) 📖
  • 파일에 내용 추가하기 ('a' 모드) ➕

프로그램에 생명력을 불어넣을 입출력 기술, 배울 준비 되셨나요? 함께 시작해봅시다! ✨

 

 

사용자로부터 입력받기: input() 함수 ⌨️

프로그램이 사용자와 상호작용하기 위한 가장 기본적인 방법은 사용자로부터 직접 데이터를 입력받는 것입니다. 파이썬에서는 input() 함수를 사용해요.

name = input("이름을 입력해주세요: ")
age_str = input(f"{name}님, 나이를 입력해주세요: ")

print(f"안녕하세요, {name}님! 입력하신 나이는 {age_str}세이군요.")

# input() 함수는 모든 입력을 문자열(string)로 받습니다.
# 숫자로 사용하려면 형 변환이 필요해요!
age_num = int(age_str)
print(f"10년 뒤 {name}님의 나이는 {age_num + 10}세가 됩니다.")

 

input() 함수는 괄호 안에 사용자에게 보여줄 안내 메시지(prompt)를 넣을 수 있습니다. 중요한 점은 input()으로 받은 값은 항상 문자열 형태라는 것입니다! 그래서 숫자 계산이 필요하다면 int(), float() 등으로 적절히 형 변환을 해주어야 합니다.

 

화면에 정보 출력하기: print() 함수의 다양한 기능 🖥️

이미 여러 번 사용해 익숙한 print() 함수! 단순히 값을 출력하는 것 외에도 몇 가지 유용한 기능이 있습니다.

print("Hello", "Python", "World") # 쉼표로 여러 값 전달 시 공백으로 구분되어 출력
print("Hello", "Python", "World", sep="-") # sep 인자로 구분자 변경
print("첫째 줄입니다.", end=" ") # end 인자로 줄바꿈 문자 대신 다른 문자 사용
print("이어서 출력됩니다.")
print("줄바꿈은\n이렇게도 가능해요.")

sep 파라미터를 사용하면 여러 값을 출력할 때 그 사이를 구분할 문자를 지정할 수 있고, end 파라미터를 사용하면 print() 함수가 실행된 후 마지막에 출력될 문자를 지정할 수 있습니다. 기본값은 줄바꿈 문자(\n)입니다.

 

문자열 깔끔하게 꾸미기: String Formatting 🎨

변수에 담긴 값을 문자열 중간에 넣어 출력하고 싶을 때, 문자열 포매팅은 매우 유용합니다. 여러 방법이 있지만, 파이썬 3.6 버전 이후로는 f-string이 가장 직관적이고 편리합니다.

name = "파이썬"
version = 3.10

# f-string (formatted string literal) - 가장 추천!
message_fstring = f"{name}의 현재 인기 버전은 {version}입니다. {name} 최고!"
print(message_fstring)

# str.format() 메소드
message_format = "{}의 현재 인기 버전은 {}입니다. {} 최고!".format(name, version, name)
print(message_format)

# 이전 방식 (C언어 스타일 % 포매팅 - 참고만 하세요)
# message_percent = "%s의 현재 인기 버전은 %.2f입니다. %s 최고!" % (name, version, name)
# print(message_percent)

f-string은 문자열 앞에 f를 붙이고, 중괄호 {} 안에 변수명이나 표현식을 직접 넣어 사용할 수 있어 가독성이 매우 좋습니다.

 

파일의 세계로: 파일 열고 닫기 📁

프로그램이 종료되어도 데이터를 보존하고 싶을 때, 우리는 파일을 사용합니다. 파일 작업을 하려면 먼저 파일을 '열어야(open)' 하고, 작업이 끝나면 반드시 '닫아야(close)' 합니다.

# 1. 파일 열기 (open)
# file = open("my_file.txt", "w") # "w": 쓰기 모드. 파일이 없으면 생성, 있으면 덮어씀.

# ... 파일 작업 수행 ...

# 2. 파일 닫기 (close) - 중요!
# file.close()

# 3. with 문 사용 (자동으로 close 해줌 - 강력 추천!)
try:
    with open("my_file.txt", "w") as file:
        # ... 이 블록 안에서 파일 작업 수행 ...
        file.write("첫 번째 줄입니다.\n")
    # with 블록을 벗어나면 file.close()가 자동으로 호출됩니다.
    print("파일 쓰기 완료 (with 문 사용)")
except Exception as e:
    print(f"파일 처리 중 오류 발생: {e}")

파일을 열 때는 open('파일명', '모드') 함수를 사용합니다. 모드에는 여러 가지가 있는데, 'w'(쓰기), 'r'(읽기), 'a'(추가) 등이 대표적입니다. 파일을 다 사용한 후 close() 메소드를 호출하여 닫아주는 것은 매우 중요합니다. 그렇지 않으면 데이터가 제대로 저장되지 않거나 시스템 자원이 낭비될 수 있습니다.

 

이러한 번거로움을 줄이고 실수를 방지하기 위해 with open(...) as ...: 구문을 사용하는 것이 좋습니다. with 블록이 끝나면 파이썬이 자동으로 파일을 닫아주므로 close()를 명시적으로 호출할 필요가 없습니다.

 

새로운 파일 만들기 및 내용 쓰기 ('w' 모드)  

'w' (write) 모드로 파일을 열면, 파일이 존재하지 않으면 새로 생성하고, 이미 존재한다면 기존 내용을 모두 지우고 새로 씁니다.

try:
    with open("new_notes.txt", "w", encoding="utf-8") as f: # encoding="utf-8"은 한글 처리를 위해 권장
        f.write("파이썬 파일 쓰기 연습 중입니다.\n")
        f.write("두 번째 줄도 써볼까요?\n")
        lines = ["여러 줄 쓰기 첫 번째\n", "여러 줄 쓰기 두 번째\n"]
        f.writelines(lines) # 리스트의 문자열들을 한 번에 씀 (줄바꿈 문자 포함해야 함)
    print("new_notes.txt 파일에 내용 쓰기 완료!")
except Exception as e:
    print(f"파일 쓰기 중 오류: {e}")

write() 메소드는 문자열 하나를 파일에 쓰고, writelines() 메소드는 문자열 리스트를 받아 각 문자열을 파일에 씁니다. 한글을 파일에 쓸 때는 encoding="utf-8" 옵션을 open() 함수에 추가해주는 것이 좋습니다.

 

파일에서 내용 읽어오기 ('r' 모드) 📖

'r' (read) 모드로 파일을 열면 파일의 내용을 읽을 수 있습니다. 파일이 존재하지 않으면 오류가 발생합니다.

try:
    with open("new_notes.txt", "r", encoding="utf-8") as f:
        # 1. 전체 내용 한 번에 읽기: read()
        # content_all = f.read()
        # print("--- 전체 내용 ---")
        # print(content_all)

        # 파일을 다시 처음부터 읽으려면 파일을 다시 열거나 seek(0) 사용
        # f.seek(0) # 파일 포인터를 처음으로 이동

        # 2. 한 줄씩 읽기: readline()
        # print("--- 한 줄씩 읽기 ---")
        # line1 = f.readline() # 첫 번째 줄 읽음 (줄바꿈 문자 포함)
        # print(f"첫 줄: {line1.strip()}") # strip()으로 양쪽 공백/줄바꿈 제거
        # line2 = f.readline() # 두 번째 줄 읽음
        # print(f"두 번째 줄: {line2.strip()}")

        # f.seek(0)

        # 3. 모든 줄을 리스트로 읽기: readlines()
        # print("--- 모든 줄을 리스트로 ---")
        # lines_list = f.readlines()
        # for line in lines_list:
        #     print(line.strip())

        # f.seek(0)

        # 4. 파일 객체를 직접 순회 (가장 파이썬스러운 방법)
        print("--- 파일 객체 순회하며 읽기 ---")
        for line_num, line_content in enumerate(f, 1):
            print(f"{line_num}번째 줄: {line_content.strip()}")

except FileNotFoundError:
    print("읽으려는 파일(new_notes.txt)이 존재하지 않습니다.")
except Exception as e:
    print(f"파일 읽기 중 오류: {e}")
  • read(): 파일 전체 내용을 하나의 문자열로 반환합니다. 큰 파일의 경우 메모리 문제를 일으킬 수 있습니다.
  • readline(): 파일에서 한 줄씩 읽어 문자열로 반환합니다. 파일의 끝에 도달하면 빈 문자열을 반환합니다.
  • readlines(): 파일의 모든 줄을 읽어 각 줄을 요소로 하는 리스트로 반환합니다.
  • 파일 객체 자체를 for 루프에서 사용하면 한 줄씩 효율적으로 읽을 수 있어 가장 권장되는 방식입니다.

파일에 내용 추가하기 ('a' 모드)

'a' (append) 모드로 파일을 열면, 파일이 존재하지 않으면 새로 생성하고, 존재한다면 기존 내용의 맨 뒤에 새로운 내용을 추가합니다. 'w' 모드처럼 기존 내용을 삭제하지 않아요.

try:
    with open("new_notes.txt", "a", encoding="utf-8") as f:
        f.write("이 내용은 파일 끝에 추가됩니다.\n")
        f.write("또 다른 추가 내용!\n")
    print("new_notes.txt 파일에 내용 추가 완료!")

    # 추가된 내용 확인
    print("\n--- 추가 후 파일 내용 ---")
    with open("new_notes.txt", "r", encoding="utf-8") as f_read:
        print(f_read.read())
except Exception as e:
    print(f"파일 추가 중 오류: {e}")

로그를 기록하거나, 기존 데이터를 유지하면서 새로운 정보를 계속 쌓아가야 할 때 'a' 모드가 매우 유용합니다.

 

정리하며 📝

오늘은 파이썬으로 사용자와 소통하고 파일을 다루는 기본적인 방법들을 배웠습니다!

  • input() ⌨️: 사용자로부터 데이터를 입력받아 프로그램에 전달합니다. (항상 문자열로 반환!)
  • print() 🖥️: 사용자에게 정보를 보여주고, sepend로 출력을 조절할 수 있습니다.
  • String Formatting (특히 f-string) 🎨: 변수를 포함한 문자열을 깔끔하고 읽기 쉽게 만듭니다.
  • open()with 문 📁: 파일 작업의 시작과 끝을 안전하게 관리합니다. (with 문 사용 권장!)
  • 파일 모드 ('w', 'r', 'a') ✍️📖➕: 파일에 쓰고(w), 읽고(r), 추가하는(a) 다양한 작업을 수행합니다.
  • 파일 읽기 메소드 (read(), readline(), readlines()): 필요에 따라 다양한 방식으로 파일 내용을 가져옵니다.

지난 시간까지 시간이라는 개념을 프로그램에 불어넣었다면, 오늘 배운 사용자 입출력과 파일 처리는 프로그램에 '기억'과 '소통' 능력을 더해주는 것과 같습니다. 💾🗣️ 이제 여러분의 프로그램은 사용자와 상호작용하고, 중요한 데이터를 영구적으로 저장하며, 더욱 강력하고 실용적인 도구로 거듭날 수 있게 되었습니다.

 

 

오늘도 정말 수고 많으셨습니다! 💪 다음 시간에는 또 어떤 흥미로운 파이썬의 세계로 떠나볼까요? 기대해주세요! 즐거운 코딩 여정 되시길 바랍니다! 👋

 

https://abit.ly/lisbva