Presentation is loading. Please wait.

Presentation is loading. Please wait.

빠르게 활용하는 파이썬3 프로그래밍 Chapter 8. 입출력 안녕하세요, 파이썬의 세계에 오신 것을 환영합니다.

Similar presentations


Presentation on theme: "빠르게 활용하는 파이썬3 프로그래밍 Chapter 8. 입출력 안녕하세요, 파이썬의 세계에 오신 것을 환영합니다."— Presentation transcript:

1 빠르게 활용하는 파이썬3 프로그래밍 Chapter 8. 입출력 안녕하세요, 파이썬의 세계에 오신 것을 환영합니다.
이번 시간에는 파이썬3의 입출력에 대해서 알아보겠습니다.

2 출력 화면으로 출력할 때는 print() 함수를 사용합니다. 파이썬 버전 2.x 때는 print가 함수가 아니었지만, 3.0 에서는 함수로 바뀌었습니다. 즉, 다음과 같이 함수처럼 괄호 안에 출력할 인자를 적으면 됩니다. >>> print(1) 1 >>> print('hi, guyz') hi, guyz Print 함수의 입력인자로 다음과 같이 구분자(sep), 끝라인(end), 출력(file)을 지정해 줄 수 있습니다. 아래 예제와 같이 file을 이용해서 출력을 표준오류(standard error)로 변경하거나 파일로 바꿀 수도 있습니다. >>> print("welcome to","python", sep="~", end="!", file=sys.stderr)   welcome to~python!

3 포맷팅(formatting) Print만 가지고는 출력이 좀 불편하다고 느끼실 것입니다. 그러나 format() 메소드을 사용하면 문자열을 그 이상으로 자유롭게 다룰 수가 있습니다. 문자열 내에서 어떤 값이 들어가길 원하는 곳은 {}로 표시를 합니다. {} 안의 값들은 숫자로 표현할 수 있으며, format 인자들의 인덱스를 사용합니다. 아래 예제를 보면, {0}는 첫 번째 인자인 "apple"을 나타내고 {1}은 두 번째 인자인 "red"를 나타냅니다. >>> print("{0} is {1}".format("apple", "red")) apple is red

4 포맷팅(formatting) {} 안의 값을 지정할 때는 다음과 같이 format의 인자로 키(key)와 값(value)을 주어 위와 동일한 결과를 얻을 수 있습니다. >>> print("{item} is {color}".format(item="apple", color="red")) apple is red 이번에는 dictionary를 입력으로 받는 경우를 살펴보도록 하겠습니다. >>> dic = {"item":"apple", "color":"red"} >>> print("{0[item]} is {0[color]}".format(dic)) apple is red

5 포맷팅(formatting) 앞에서 {0[item]}의 0[]을 달고 다니느라 매우 불편하셨을 텐데요, ** 기호를 사용하면 dictionary를 입력으로 받은 것으로 판단하고 인자를 하나만 받게 됩니다. 그러므로 아래와 같이 불필요한 index는 생략할 수 있습니다. >>> print("{item} is {color}".format(**dic)) apple is red

6 포맷팅(formatting) ! 기호를 사용해서 문자열 변환을 사용할 수 있습니다.
>>> print("{item!s} is {color!s}".format(**dic)) apple is red >>> print("{item!r} is {color!r}".format(**dic)) 'apple' is 'red' >>> print("{item!a} is {color!a}".format(**dic)) 'apple' is 'red' !s, !r, !a는 각각 str(), repr(), ascii() 를 실행한 결과와 동일하다고 보시면 됩니다.

7 포맷팅(formatting) 이번에는 “:” 기호를 이용하여 보다 정교하게 정렬, 폭, 부호, 공백처리, 소수점, 타입 등을 지정할 수 있는 법을 알아보겠습니다. >>> print("{0:$>5}".format(10)) $$$10 “{0"까지는 첫 번째 인자인 ‘10’을 표시하라는 뜻인 것을 알 수 있습니다. 그런데 ":" 이후의 기호들은 모두 처음 보는 것들이네요. 눈치가 빠르신 분들은 이미 파악하셨겠지만, "$"는 공백을 채우는 문자를 "$"로 채우라는 의미이며, ">"는 오른쪽 정렬을, "5"는 전체 자리수가 5자리라는 것을 나타냅니다.

8 포맷팅(formatting) 정렬에 사용되는 기호는 ">", "<", "^", "=" 이 있습니다. ">"는 오른쪽 기준, "<"는 왼쪽 기준, "^"는 가운데 기준을 나타냅니다. "="는 부호와 상관이 있는데, "="가 사용되면 공백문자들 앞에 부호가 표시됩니다. 사용되지 않으면 공백문자들 뒤, 즉, 숫자 바로 앞에 부호가 표시됩니다. 부호를 나타내는 기호는 "+", "-", " "이 있습니다. "+"는 플러스 부호를 나타내라는 뜻이며, "-"는 마이너스 값만 마이너스 부호를 나타내라는 것을 의미하며, " "는 마이너스 값에는 마이너스 부호를 나타내고 플러스일 때는 공백을 표시하라는 뜻입니다.

9 포맷팅(formatting) 진수를 바꿔서 출력할 수도 있습니다. "b"는 이진수를, "d"는 십진수를, "x"는 16진수를, "o"는 8진수를 나타내며 "c"는 문자열을 출력합니다. >>> print("{0:b}".format(10)) 1010 >>> print("{0:o}".format(10)) 12 >>> print("{0:c}".format(65)) 또한 "#"를 사용하면 #x는 16진수 #o는 8진수, #b는 2진수로 표시 됩니다. >>> print("{0:#x}, {0:#o}, {0:#b}".format(10)) 0xa, 0o12, 0b1010

10 포맷팅(formatting) 정수 이외에 실수에 대한 변환도 제공되며, "e"는 지수표현을, "f"는 일반적인 실수 표현을, "%"는 퍼센트 표현을 의미합니다. >>> print("{0:e}".format(4 / 3)) e+00 >>> print("{0:f}".format(4 / 3)) >>> print("{0:%}".format(4 / 3)) % 실수에서는 다음과 같이 소수점 몇 번째 자리까지 표현할 것인지를 지정할 수 있습니다. 아래 예제에서는 소수점 3번째 자리까지만 출력되는 것을 확인할 수 있습니다. >>> print("{0:.3f}".format(4 / 3)) 1.333

11 입력 사용자로부터 입력은 다음과 같이 input()함수를 이용해서 받을 수 있습니다.
input의 입력인자로는 화면에 출력할 프롬프트(prompt)를 줄 수 있으며, 생략 가능하며, 결과값으로는 문자열 객체를 반환합니다. >>> a = input('insert any keys :') insert any keys : test  >>> print(a) test

12 파일 입출력 파일로의 입출력은 앞에서 본 바와 같이 print() 함수의 file 입력인자를 이용할 수도 있지만, 파일 입출력 제어를 보다 세밀하게 하기 위해서는 open() 함수를 통해서 파일을 연 후 파일 전용 함수들을 이용해서 작업하는 것이 일반적입니다. >>> f = open('test.txt', 'w') Open 함수의 마지막 인자는 파일을 열 때의 속성을 의미하며, 다음 속성들의 조합으로 사용이 가능합니다. r : 읽기 모드 ( 디폴트 ) w : 쓰기 모드 a : 쓰기 + 이어쓰기 모드 + : 읽기 + 쓰기 모드 b : 바이너리 모드 t : 텍스트 모드 (디폴트 )

13 파일 입출력 파일로부터 읽고 쓰기 위해서 파일로부터 모든 데이터를 읽는 read() 함수와 문자열을 쓰는 write() 함수가 제공됩니다. 또한 파일을 열고 할 일을 모두 완료했을 경우 파일객체를 닫아주는 close() 함수가 있습니다. >>> f = open('test.txt', 'w') >>> f.write('plow deep\nwhile sluggards sleep') 31 >>> f.close()

14 파일 입출력 이번에는 이 파일이 제대로 쓰였는지 읽어 보도록 하겠습니다.
>>> f = open('test.txt') >>> f.read() 'plow deep\nwhile sluggards sleep' >>> f.close() >>> f.closed True 텍스트 모드에서는 일반 문자열과 같이 encoding이 적용되기 때문에, 바이너리 데이터(binary data)를 다룰 때에는 오류가 발생하게 됩니다. 그러므로 바이너리 데이터를 다룰 때에는 반드시 바이너리 모드를 사용해야 합니다.

15 파일 입출력 파일 입출력 관련 함수들 With ~ as 구문
readline() 함수는 호출할 때 마다 한 줄씩 읽은 문자열을 반환하며, readlines() 함수는 파일의 모든 내용을 줄 단위로 잘라서 리스트를 반환합니다. tell() 함수는 현재 파일에서 어디까지 읽고 썼는지 위치를 반환하며, seek() 함수는 사용자가 원하는 위치로 포인터를 이동합니다. With ~ as 구문 >>> with open('test.txt') as f: [TAB]print( f.readlines() ) [TAB]print( f.closed ) ['plow deep\n', 'while sluggards sleep'] False >>> f.closed True

16 Pickle 그런데 문자열의 경우에는 배운 방법을 사용하여 쉽게 다룰 수 있지만, 리스트나 클래스 등을 저장할 때는 어떻게 해야 할까요? 내용을 모두 분해해서 파일에 저장한 후, 다시 읽어 들일 때는 구분해서 다시 값을 설정해야 할까요? 파이썬에는 이러한 일들을 쉽게 할 수 있도록 도와주는 pickle이라는 모듈이 있습니다.

17 Pickle 다음과 같이 리스트가 있다고 가정합니다.
>>> colors = ['red', 'green', 'black'] 아래와 같이 pickle모듈의 dump함수를 사용하면, colors를 다음과 같이 쉽게 파일에 저장할 수 있습니다. >>> import pickle >>> f = open('colors', 'wb') >>> pickle.dump(colors, f) >>> f.close()

18 Pickle 이번에는 파일로부터 다시 읽어보겠습니다. 우선 colors를 삭제한 후, load 함수를 이용해서 리스트를 읽어 들입니다. >>> del colors >>> f = open('colors', 'rb') >>> colors = pickle.load(f) >>> f.close() >>> colors ['red', 'green', 'black'] pickle로 파일에 쓰거나 읽을 때는 반드시 바이너리 모드로 파일을 열어야 합니다.

19 Pickle pickle로 저장할 수 있는 대상은 파이썬 객체라면 거의 모두 가능합니다. 기본 자료형은 물론이고 아래 예제와 같이 사용자가 정의한 클래스 객체도 pickle이 가능합니다. >>> class test: [TAB]var = None >>> a = test() >>> a.var = 'Test' >>> f = open('test', 'wb') >>> pickle.dump(a, f) >>> f.close() >>> f = open('test', 'rb') >>> b = pickle.load(f) >>> b.var 'Test'

20 수고하셨습니다.


Download ppt "빠르게 활용하는 파이썬3 프로그래밍 Chapter 8. 입출력 안녕하세요, 파이썬의 세계에 오신 것을 환영합니다."

Similar presentations


Ads by Google