SiLaure's Data

[Python] 15-. Python 데이터 입출력(I,O) (1) 본문

Records of/Learning

[Python] 15-. Python 데이터 입출력(I,O) (1)

data_soin 2021. 7. 22. 18:24

Python 프로그래밍의 마지막.

 

- I/O란?

 : input/output의 약자

  • 프로그램 입장에서 들어오는 모든 데이터를 input, 나가는 모든 데이터를 output이라고 한다.
  • 메인 메모리 입장에서 생각하는 들어오고 나가는 모든 데이터에 대해서 I/O 처리라고 부른다.
     (단, CPU와의 소통은 제외)
  • 통상적으로는 Unix 환경(터미널 환경)에서 부르던 용어임
사용자로 부터 키보드로 입력받는 것 : stdin
사용자에게 다시 모니터로 출력되는 것 : stdout
  • 프로그램은 메인 메모리 상에 존재하기 때문에
    스토리지로부터 파일을 불러오는 것도 input이고, 프로그램의 결과를 스토리지에 저장하는 것도 output이다.

 

이러한 작업을 file I/O로 통칭한다.

 

 

  • 스토리지와 프로그램 사이의 I/O를 file I/O라고 한다.
  • 파이썬에서 stdin/out을 사용하는 방법과 file I/O를 사용하는 방법에 대해 간단하게 알아본다.

 

 

 

- STDIN / STDOUT (Standard IN, Standard OUT)

  • 파이썬은 input()을 통해서 stdin을 사용자로부터 입력받을 수 있다.
  • 파이썬은 print()를 통해서 stdout을 사용자에게 출력할 수 있다.
  • 파이썬에서는 stdin은 무조건 문자열 타입으로 들어오므로,
    type casting을 통해서 다른 데이터 타입으로 바꾸어 사용해야 한다.

 

 

 

- 키보드로 입력받은 값을 할당하고 출력해보기

a = input()
a, type(a)
안녕하세요

출력 : ('안녕하세요', str)

 

 

 

 

- 입력받는 값을 숫자라고 가정한 경우

a = input("숫자를 입력하세요 : ")
a, type(a)
숫자를 입력하세요 : 13

출력 : ('13', str)

 

 

 

 

 

- 입력받는 값을 숫자라고 가정했는데 문자열이 들어오면 에러가 발생함
  => type casting이 실패한 경우

a + 5
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-9a6da2884e4e> in <module> ----> 1 a + 5 TypeError: can only concatenate str (not "int") to str

 

 

 

 

 

- type casting -- (명시적) 타입 변환

a = int(input("숫자를 입력하세요 : "))
a, type(a)

출력 : (13, int)

 

 

 

 

 

 

- stdin가 string이기 때문에 fancy하게 input을 handle 할 수 있는 방법

(영어 좀 써 봤음ㅋ --원래는 '입력이 문자열이기 때문에 fancy하게 input을 처리할 수 있는 방법')

 

 

Q. 만약에 stdin으로 여러 개의 숫자가 들어오는 경우 이를 효과적으로 처리하는 방법은?

    (입력의 format을 알고 있다고 가정)

# 이는 숫자를 2개로 가정한 경우
a, b = 1, 2
a, b = b, a
a, b

출력 : (2, 1)

 

 

 

 

Q. 문자들을 입력 받아 문자열을 잘라서 써보자.

s = input()

a = int(s.split(',')[0])
b = int(s.split(',')[1])

print(a, b, type(a), type(b))

출력 :

1, 2, 3, 4, 5
1 2 <class 'int'> <class 'int'>

 

 

 

 

만약, 자를 문자가 너무너무너무너무 많다면?

- list comprehension

  • list를 생성하는 exprssion
  • 원소가 될 원소의 expression --반복문/조건문으로 만든다.

 

 

1. 빈 list를 만들어 1 부터 5까지 돌기

L = []

for x in range(1,5) :
    L.append(x)

 

 

2. 더 간단하게 써보기

L = list(range(1,5))

 

 

3. list comprehesion으로 써보기

L = [x for x in range(1, 5)]
: x는 1에서 5까지 하나씩 돈 그 x가 원소인 리스트

 

 

 

 

Q. 홀수는?

  • 원래 사용하던 방법
L = []
L = [x for x in range(1, 10) if x % 2 != 0]
L
  • list comprehesion을 사용한 방법
L = []
L = [x for x in range(1, 10) if x % 2 != 0]
L

 

 

 

Q. 리스트로 들어간 문자열인 원소를 숫자로 바꿔보자.

L = input("콤마를 기준으로 숫자를  여러개 입력해주세요. :").split(',')
L

출력 : ['1', ' 2', ' 3', ' 4']

 

 

 

리스트에 들어간 원소는 문자열임
L = [int(x) for x in input("콤마를 기준으로 숫자를  여러개 입력해주세요. :").split(',')]
L

출력 : [1, 2, 3, 4]

 

 

 

 

위의 코드와 같음. for문의 정석대로 짠 코드

L = []
for x in input("콤마를 기준으로 숫자를  여러개 입력해주세요. :").split(',') :
    x = int(x)
    L.append(x)
L

 

 

 

 

Comments