import sys 입출력

2400·2025년 4월 7일
0

Python

목록 보기
3/3
post-thumbnail

Python의 sys 모듈을 사용한 입출력 방법

sys 모듈은 Python 인터프리터와 직접 상호작용하는 시스템 특정 파라미터와 함수를 제공한다. 특히 입출력 작업에서 유용하며, 표준 input()/print() 함수보다 더 많은 제어와 성능을 제공한다.

1. 기본 입력 메소드: sys.stdin.readline()

import sys

# 기본 형태
line = sys.stdin.readline()

sys.stdin.readline()input() 함수보다 성능이 더 좋습니다. 특히 대량의 데이터를 처리할 때 유용하다. 주의할 점은 개행 문자(\n)를 포함하여 반환한다는 것이다.

# 개행 문자 제거하기
line = sys.stdin.readline().strip()  # 양쪽 공백과 개행 문자 제거
# 또는
line = sys.stdin.readline().rstrip()  # 오른쪽 공백과 개행 문자만 제거

2. 다양한 형태의 입력 처리

공백으로 구분된 여러 값 처리

# 문자열로 처리
a, b = sys.stdin.readline().split()

# 정수로 변환
a, b = map(int, sys.stdin.readline().split())

# 실수로 변환
a, b = map(float, sys.stdin.readline().split())

# 특정 구분자로 나누기
a, b = sys.stdin.readline().split(':')  # 콜론으로 구분

여러 줄 입력 처리

# n줄 입력 받기
n = int(sys.stdin.readline())
lines = [sys.stdin.readline().strip() for _ in range(n)]

# for문 사용해서 받기
lines = []
for _ in range(n):
    lines.append(sys.stdin.readline().strip())

모든 입력 읽기 (EOF까지)

# 파일이나 표준 입력의 모든 줄 읽기
lines = []
for line in sys.stdin:
    if line.strip() == "":  # 빈 줄이면 종료 (선택 사항)
        break
    lines.append(line.strip())

3. 입력을 리스트나 배열로 변환

# 공백으로 구분된 정수를 리스트로
nums = list(map(int, sys.stdin.readline().split()))

# 한 줄에 하나씩 있는 정수들을 리스트로
n = int(sys.stdin.readline())
nums = [int(sys.stdin.readline()) for _ in range(n)]

# 2차원 배열(리스트의 리스트) 입력 받기
n, m = map(int, sys.stdin.readline().split())  # 행과 열
matrix = []
for _ in range(n):
    row = list(map(int, sys.stdin.readline().split()))
    matrix.append(row)

# 또는 더 간결하게
matrix = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]

4. 파일에서 입력 받기

# 파일에서 입력 리다이렉션
sys.stdin = open('input.txt', 'r')

# sys.stdin.readline()은 파일에서 읽기
line = sys.stdin.readline()

# 파일 닫기 및 원래 표준 입력으로 복원
sys.stdin.close()
sys.stdin = sys.__stdin__

5. 출력 메소드: sys.stdout.write()

# 기본 형태
sys.stdout.write("Hello, World!\n")  # 개행 문자를 명시적으로 추가해야 함

# 숫자 출력 시 문자열로 변환 필요
sys.stdout.write(str(123) + "\n")

sys.stdout.write()print() 함수보다 약간 더 빠르지만, 문자열만 받을 수 있고 개행 문자를 자동으로 추가하지 않는다.

6. 프로그램 종료: sys.exit()

# 성공적인 종료
sys.exit(0)

# 오류 코드와 함께 종료
sys.exit(1)  # 1 또는 다른 숫자는 오류를 나타냄

# 메시지와 함께 종료 (stderr에 출력됨)
sys.exit("오류 발생: 파일을 찾을 수 없습니다")

알고리즘 문제 풀이 (대량 입력 처리)

import sys
input = sys.stdin.readline  # 더 빠른 입력을 위한 별칭 설정

n = int(input())
array = list(map(int, input().split()))
result = sum(array)
print(result)

여기에서 input = sys.stdin.readline에 '()'를 왜 안붙이냐면, input = sys.stdin.readline은 readline 함수 자체를 input 변수에 할당한다. 이렇게 하면 input()을 호출할 때마다 sys.stdin.readline()이 실행이 된다. input = sys.stdin.readline()은 readline 함수를 한 번 호출하고 그 결과(첫 번째 입력 줄의 문자열)를 input 변수에 할당한다. 이 경우 input은 함수가 아닌 문자열이 되어 더 이상 함수로 호출할 수 없게 되기에 괄호가 없는게 맞다.

profile
시즌 2의 공부기록 - Artificial Intelligence & AeroSpace

0개의 댓글