본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 라이브러리 11장 - 운영체제 다루기1 (맥OS 기준) — 데이터 입출력을 안전하고 유연하게 처리하는 방법 io.StringIO, argparse

OS: MAC

참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기

059. 문자열을 파일처럼 다루려면? ― io.StringIO(아이오.스트링아이오)

✔ execute()는 “파일처럼 읽을 수 있는 객체”만 받으면 됨
✔ 문자열을 파일처럼 바꾸기 위해 StringIO 사용
✔ 그렇게 하면 파일 없이도 CSV 처리 가능
✔ 문제 조건(함수 수정 불가) 완전히 충족

구분 설명 예시 결과
모듈 문자열(String)을 파일처럼 읽고 쓰도록 만들어주는 가짜 파일 객체. from io import StringIO 문자열을 파일처럼 다룰 준비 완료
역할 실제 파일을 만들지 않고도 파일 입출력처럼 문자열을 처리할 수 있음.
테스트 코드, 임시 파일, 로그 버퍼 등에 많이 사용됨.
from io import StringIO
f = StringIO("hello")
출력값 없음(정상)
# 메모리에서 동작하는 파일 객체 생성
= 문자열을 파일처럼 바꾸기
쓰기
(write)
보통의 파일처럼 .write() 사용. from io import StringIO
f = StringIO()
f.write("Hello Sophia")
12
# 내부 버퍼에 문자열이 저장됨
읽기
(read)
.read() 또는
.readline() 로 내용 읽기 가능.
from io import StringIO
f = StringIO("ABC")
print(f.read())
ABC
커서 이동 (seek) 파일처럼 커서가 있음.
seek(0) 해야 처음부터 다시 읽음.
① from io import StringIO
f = StringIO()
f.write("Hello")
print(f.read())

② from io import StringIO
f = StringIO()
f.write("Hello")
f.seek(0)    # 커서 처음으로 이동
print(f.read())  # 이제 처음부터 읽힘
write 후 커서가 문장의 끝에 있기 때문에
아무것도 출력되지 않음
(read() 는 커서 위치부터 읽음
→ 끝에서 읽을 게 없음 → 출력 없음.)

  Hello

# 참고
 
전체 내용 가져오기 .getvalue() 로 내부 문자열 전부 가져오기.
파일처럼 저장된 문자열 전체 반환
from io import StringIO
f = StringIO()
f.write("Hello Sophia!\n")
f.write("Python StringIO test.")
f.seek(0)
text = f.getvalue()
print(text)   
Hello Sophia!
Python StringIO test.

라이브러리 예제 문제:

다음은 CSV 파일을 읽어 각 줄의 첫 번째 숫자와 두 번째 숫자, 그리고 그 두 숫자를 더한 값을 추가하여 만든 리스트 배열을 반환하는 프로그램이다.

import csv

def execute(f):
    result = []
    reader = csv.reader(f)
    for line in reader:
        one = int(line[0])
        two = int(line[1])
        three = one+two
        line.append(three)
        result.append(line)
    return result

with open('src.csv', 'r', encoding='utf-8') as f:
    result = execute(f)  # 함수실행
    print(result)

CSV 파일을 읽어 처리하는 execute() 함수를 실행하는 데 필요한 src.csv 파일 내용은 다음과 같다.

점프 투 파이썬 - 라이브러리 예제 편 11장 59번 문제
점프 투 파이썬 - 라이브러리 예제 편 11장 59번 문제 풀이 및 결과

060. 명령행 옵션을 지정하여 실행하려면? ― argparse(아그파스)

★ 사용방식: IDLE3 셸→ 새 파일 → 코드 붙여넣기 → 저장 → 터미널에서 실행 ★

 

  • 터미널에서 파라미터 받아서 동작하는 스크립트 만들 때
  • 크롤러, 배치 작업, 자동화 스크립트 등
  • CLI 옵션이 3개 이상 필요한 프로그램에서는 거의 필수(항상 파이썬 스크립트(.py) 형태로 실행)

 

구분 설명 예시 결과
모듈 Python 실행할 때 명령행 옵션
(–-option)
을 쉽게 처리해주는 모듈
import argparse CLI 프로그램에서
옵션을 쉽게 처리할 수 있음
역할 프로그램 실행 시 전달하는 옵션/인자를 받아서 자동으로 파싱하고, 도움말도 자동 생성 parser = argparse.ArgumentParser() CLI 인터페이스 자동 세팅
옵션 추가 .add_argument() 로 옵션 이름과 타입, 기본값 등을 지정 parser.add_argument("--name") --name 옵션을 사용할 수 있게 됨
옵션 파싱 .parse_args() 로 실제 전달된 옵션을 객체 형태로 가져옴 args = parser.parse_args() args.name, args.age 등으로 값 접근 가능
필수 옵션 required=True 로 지정 parser.add_argument("--age", required=True) 옵션 미입력 시 에러 출력
기본값 default= 로 설정 parser.add_argument("--count", default=1) 옵션 미입력 시 기본값 적용
타입 지정 옵션 값 자동 타입 변환 parser.add_argument("--num", type=int) 문자열이 아닌
정수(int)로 자동 변환
도움말 생성 --help 옵션을 자동으로 만들어줌 $ python3 app.py --help 사용법/옵션 설명 자동 출력
기본예시 1. cli_test.py로
IDLE에서 파일 저장

2. 터미널에서 해당 파일이 위치한 경로로 이동
cd ~/Desktop

3. 터미널
python3 cli_test.py --name Sophia --age 30 입력

4. 출력값
Hello Sophia! You are 30 years old.



#cli_test.py

import argparse

parser = argparse.ArgumentParser(description="argparse 연습 프로그램")

parser.add_argument("--name", type=str, required=True, help="사용자 이름")
parser.add_argument("--age", type=int, default=20, help="나이")

args = parser.parse_args()

print(f"Hello {args.name}! You are {args.age} years old.")
 

라이브러리 예제 문제: 

점프 투 파이썬 - 라이브러리 예제 편 11장 60번 문제

먼저 add_mul.py를 IDLE 셸에 작성하자

점프 투 파이썬 - 라이브러리 예제 편 11장 60번 문제 풀이 및 결과1 (add_mul.py 생성)

 

이제 터미널에서 입력해보자.

점프 투 파이썬 - 라이브러리 예제 편 11장 60번 문제 풀이 및 결과2 (add_mul.py 활용 by터미널)