Python 에서 입출력 (I/O) 처리하기

PythonBeginner
지금 연습하기

소개

본 랩에서는 Python 에서 입출력 (Input/Output) 을 처리하는 기본 개념을 학습합니다. print() 함수를 사용하여 콘솔에 정보를 표시하는 방법과 키보드로부터 사용자 입력을 받는 방법을 탐구할 것입니다.

더 나아가, 파일에 데이터를 쓰고 다시 파일에서 데이터를 읽어오는 실질적인 경험을 쌓게 될 것입니다. 이는 사용자 상호작용이 필요하거나 파일에 저장된 데이터를 다루어야 하는 모든 Python 프로그램에 필수적인 기술입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

콘솔에 문자열 출력하기

Python 에서 콘솔에 출력을 표시하는 주요 함수는 print()입니다. 사용법은 간단합니다. 이 단계에서는 print()를 사용하여 텍스트를 표시하는 연습을 할 것입니다.

먼저, WebIDE 왼쪽의 파일 탐색기에서 output.py 파일을 찾습니다. 이 파일을 두 번 클릭하여 편집기에서 엽니다.

output.py 파일에 다음 코드를 추가합니다.

print("Hello, LabEx!")
print("This is a Python course.")

파일을 저장합니다 (단축키 Ctrl+S를 사용할 수 있습니다). 이 스크립트를 실행하려면 WebIDE 하단의 터미널을 열고 다음 명령을 실행합니다. 터미널은 이미 ~/project 디렉토리에 있어야 합니다.

python ~/project/output.py

터미널에서 다음과 같은 출력을 보게 될 것입니다.

Hello, LabEx!
This is a Python course.

print() 함수는 쉼표로 구분된 여러 인자 (argument) 를 받을 수도 있습니다. 기본적으로 이들은 단일 공백으로 구분되어 출력됩니다.

output.py 파일을 수정하여 내용을 다음 줄로 대체합니다.

print("Apple", "Banana", "Orange", "Grape", "Watermelon")

파일을 저장하고 터미널에서 다시 실행합니다.

python ~/project/output.py

출력 결과는 다음과 같습니다.

Apple Banana Orange Grape Watermelon

sep 파라미터를 사용하여 구분자 (separator) 를 사용자 정의할 수 있습니다. sep의 기본값은 공백 (' ') 입니다. 이를 수직선 (|) 으로 변경해 보겠습니다.

output.py를 다시 한 번 수정합니다.

print("Apple", "Banana", "Orange", "Grape", "Watermelon", sep=" | ")

스크립트를 저장하고 실행합니다.

python ~/project/output.py

이제 출력 결과는 사용자 정의 구분자를 사용합니다.

Apple | Banana | Orange | Grape | Watermelon

이를 통해 콘솔 출력 형식을 제어하는 방법을 시연해 보았습니다.

키보드로부터 사용자 입력 받기

지금까지 작성한 스크립트는 미리 정의된 내용만 표시했습니다. 프로그램을 더 상호작용적으로 만들기 위해서는 사용자로부터 입력을 받아야 합니다. Python 에서는 input() 함수를 사용하여 이 작업을 수행할 수 있습니다.

WebIDE 파일 탐색기에서 interactive.py 파일을 찾아 엽니다. 다음 코드를 파일에 추가합니다.

name = input("Please enter your name: ")
print("Your name is:", name)

input() 함수는 사용자에게 프롬프트 (인수로 전달하는 문자열) 를 표시하고 사용자가 무언가를 입력하고 Enter 키를 누를 때까지 기다립니다. 사용자가 입력한 텍스트는 문자열로 반환되며, 이를 name 변수에 저장합니다.

파일을 저장하고 터미널에서 스크립트를 실행합니다.

python ~/project/interactive.py

스크립트가 일시 중지되고 프롬프트가 표시됩니다. 이름을 입력하고 Enter 키를 누릅니다.

Please enter your name: Labex User
Your name is: Labex User

스크립트는 사용자의 입력을 캡처하여 최종 print() 문에서 사용합니다. 이는 상호작용적인 명령줄 애플리케이션을 만드는 기본적인 기술입니다.

파일에 데이터 쓰기

파일 읽기 및 쓰기는 일반적이고 필수적인 I/O(입출력) 작업입니다. Python 은 파일을 처리하기 위해 내장 함수인 open()을 제공합니다.

기본 구문은 open(filename, mode)입니다. mode 인수는 파일이 어떻게 사용될지 지정합니다. 일반적인 모드에는 다음이 포함됩니다.

  • 'w': 쓰기 모드 (Write mode). 쓰기를 위해 새 파일을 생성합니다. 파일이 이미 존재하는 경우 내용이 지워집니다.
  • 'r': 읽기 모드 (Read mode). 기존 파일을 읽기 위해 엽니다. 이것이 기본 모드입니다.
  • 'a': 추가 모드 (Append mode). 파일 끝에 내용을 추가하기 위해 엽니다. 파일이 존재하지 않으면 생성됩니다.

파일 작업을 위한 권장 방법은 with 문을 사용하는 것입니다. 이 문은 오류가 발생하더라도 파일을 자동으로 닫아줍니다.

파일에 텍스트를 쓰는 연습을 해보겠습니다. WebIDE 편집기에서 file_io.py 파일을 열고 다음 코드를 추가합니다.

with open("book.txt", "w") as f:
    f.write("Bed before bright moonlight,\n")
    f.write("Suspected to be frost on the ground.\n")
    f.write("Head held high, gazing at the bright moon,\n")
    f.write("Head bowed low, thinking of my homeland.")

이 코드는 쓰기 모드 ('w') 로 book.txt라는 파일을 엽니다. f.write() 메서드는 문자열을 파일에 씁니다. \n 문자는 새 줄 (newline) 을 나타내므로, 각 write 호출은 새 줄에서 끝납니다.

파일을 저장하고 터미널에서 스크립트를 실행합니다.

python ~/project/file_io.py

이 명령은 콘솔에 출력을 생성하지 않지만, ~/project 디렉토리에 book.txt라는 새 파일을 생성합니다. 터미널에서 cat 명령을 사용하여 내용을 확인할 수 있습니다.

cat ~/project/book.txt

출력 결과는 파일에 썼던 텍스트여야 합니다.

Bed before bright moonlight,
Suspected to be frost on the ground.
Head held high, gazing at the bright moon,
Head bowed low, thinking of my homeland.

with 문을 사용하는 것은 코드 블록이 실행된 후 파일이 적절하게 닫히도록 보장하므로 모범 사례입니다.

파일에서 데이터 읽기

이제 book.txt를 생성하고 내용을 작성했으므로, 그 내용을 읽는 방법을 배워보겠습니다. Python 은 파일을 읽기 위한 몇 가지 방법을 제공합니다. 가장 일반적인 방법들을 살펴보겠습니다.

계속해서 file_io.py 스크립트를 사용할 것입니다. 방금 생성한 파일을 읽기 위한 코드를 추가하게 됩니다.

read() 메서드

read() 메서드는 파일의 전체 내용을 읽어 하나의 문자열로 반환합니다.

file_io.py 스크립트 끝에 다음 코드를 추가합니다. 이렇게 하면 스크립트가 먼저 파일을 작성한 다음, 다시 읽어서 그 내용을 출력하게 됩니다.

## The writing code from the previous step should be above this

print("\n--- Reading entire file with read() ---")
with open("book.txt", "r") as f:
    content = f.read()
    print(content)

파일을 저장하고 터미널에서 실행합니다.

python ~/project/file_io.py

이제 출력 결과에 book.txt의 내용이 콘솔에 인쇄되어 나타납니다.

--- Reading entire file with read() ---
Bed before bright moonlight,
Suspected to be frost on the ground.
Head held high, gazing at the bright moon,
Head bowed low, thinking of my homeland.

줄 단위로 반복하기 (Iterating Over Lines)

특히 큰 파일을 읽을 때 메모리 효율적인 방법은 파일을 한 줄씩 처리하는 것입니다. for 루프에서 파일 객체를 직접 반복하여 이 작업을 수행할 수 있습니다.

이제 file_io.py에 다음 코드 블록을 추가합니다.

print("\n--- Reading file line by line ---")
with open("book.txt", "r") as f:
    for line in f:
        print(line, end='')

여기서 print() 함수의 end=''는 파일에서 읽어온 각 line이 이미 줄 바꿈 문자 (\n) 로 끝나기 때문에 불필요한 추가 줄 바꿈이 생기는 것을 방지합니다.

다시 저장하고 스크립트를 실행합니다.

python ~/project/file_io.py

이 섹션의 출력은 read() 메서드의 출력과 동일하지만, 내부 프로세스는 한 번에 한 줄씩 읽는 방식이 다릅니다.

readlines() 메서드

readlines() 메서드는 파일의 모든 줄을 읽어 문자열 리스트로 반환합니다.

마지막으로, 이 마지막 코드 블록을 file_io.py에 추가합니다.

print("\n\n--- Reading all lines with readlines() ---")
with open("book.txt", "r") as f:
    all_lines = f.readlines()
    print(all_lines)

마지막으로 저장하고 스크립트를 실행합니다.

python ~/project/file_io.py

이 섹션의 출력은 Python 리스트가 될 것이며, 각 요소는 파일의 한 줄을 나타내는 문자열입니다.

--- Reading all lines with readlines() ---
['Bed before bright moonlight,\n', 'Suspected to be frost on the ground.\n', 'Head held high, gazing at the bright moon,\n', 'Head bowed low, thinking of my homeland.']

이제 Python 에서 파일에 쓰기와 읽기를 위한 기본 메서드들을 연습해 보았습니다.

요약

본 실습에서는 Python 에서 입출력 (I/O) 을 처리하는 기본 기술을 배웠습니다. 먼저 print() 함수를 사용하여 구분자 (separator) 를 사용자 정의하는 방법을 포함하여 형식화된 텍스트를 콘솔에 표시하는 방법을 익혔습니다. 그런 다음 input() 함수를 사용하여 키보드로부터 사용자 입력을 캡처함으로써 프로그램을 상호작용적으로 만드는 방법을 배웠습니다.

마지막으로 파일 I/O 작업을 탐구했습니다. 권장되는 with 문과 함께 쓰기 모드 (write mode) 에서 open()을 사용하여 파일에 데이터를 쓰는 방법을 배웠습니다. 또한 read(), 줄 단위 반복, readlines()를 포함한 다양한 방법을 사용하여 파일에서 데이터를 다시 읽는 연습을 했습니다. 이러한 기술은 사용자와 데이터와 상호작용하는 더 복잡한 Python 애플리케이션을 구축하는 데 기초가 됩니다.