본문 바로가기

Developing/Python_배우기

Python 08 - 입/출력 (I/O)

사용자가 사용하는 99% 이상의 완성된 프로그램들은 사용자의 입력 값에 따라 출력 값을 반환하게 되어있다. 대표적인 예로 계산기가 있다.

이전의 함수에서 입/출력의 의미를 파악했기 때문에, 지금은 다양하게 사용자의 입력을 받는 방법과 파일 입/출력에 대하여 알아본다.

 

 

사용자 입력

 

프로그래머가 선언한 변수에 사용자로부터 입력 받은 값을 대입하고 싶을 때는 다음과 같은 방법을 사용한다.

 

 

 

input의 사용

 

 

 

위의 예가 바로 기본적인 input의 사용법이다. input은 사용자의 입력을 받는 함수로써 사용하는 입력값이 문자열일 경우에는 반드시 (')나 (")으로

둘러싸서 입력해야 된다. (즉, 프로그래머가 실제 변수에 문자열을 대입할때 처럼 해야된다)

위의 예에서 해당 프로그램을 실행하면 도스창에서 커서가 대기하여 사용자가 값을 입력 ("Python is fun") 하면 이를 다시 뿌려준다.

만일 ' 혹은 " (이하 쿼테이션) 으로 둘러싸지 않으면 아래와 같은 오류가 난다.

 

 

 

 

물론 문자열이 아닌 정수를 입력할 때에는 그냥 입력해도 무방하다.

 

 

 

 

raw_input의 사용

 

 

위의 예가 바로 raw_input의 예제인데 보는바와 같이 사용자가 굳이 쿼테이션으로 싸지 않아도 결과값에서 보듯이 프로그램이 자동적으로 쿼테이션으로

싸주는 것을 볼 수 있다. 다만, 아쉽게도 정수를 입력해도 아래와 같이 자동적으로 쿼테이션으로 싼다.

 

 

 

 

 

* input과 raw_input의 차이점

=> input : 문자열 값을 넣어줄 때에는 쿼테이션으로 감싸주어야 한다.

=> raw_input : 입력하는 모든 값을 문자열로 보기 때문에 아무렇게나 입력해도 된다.

=> 코딩을 할 때에는 raw_input을 많이 사용한다. 굳이 사용자의 편의성을 위함이다. 만약 숫자를 raw_input으로 받았더라도 해도

     이것은 다시 형변환(이하 캐스팅)에 의해서 숫자의 형태로 바꿀 수 있기 때문이다.

 

 

 

프롬프트 추가하기

 

위의 예제들은 하나같이 공통점이 있는데 그것은 바로 사용자가 입력할 때 별다른 행위가 없다는 것이다.

즉, 사용자로부터 입력을 받을 때 "숫자를 입력하세요" 라던지 "당신의 이름은?" 이런 식으로 앞서 미리 알려줄 수 있다.

물론 input과 raw_input 함수 둘 다 사용 가능하다.

 

 

 

 

 

 

 

 

print 활용하기

 

여태까지의 코딩에서 모든 print 함수는 자료형을 출력하는 것이었다. 이것보다 좀 더 자세하게 print문을 알아보자면 다음과 같다.

 

 

 

"로 둘러싸인 문자열은 + 연산과 동일

 

1라인과 2라인에서는 다른 문법을 적용하여 코딩되었는데 결과는 같은 결과를 보여준다.

즉, "로 둘러싸인 문자열을 연속하여 사용하면 '+' 연산(문자열에서 연결연산)을 사용한 것과 마찬가지다.

 

 

 

띄어쓰기는 콤마

 

콤마 (,)를 이용하면 문자열 간에 띄어쓰기가 적용된다.

 

 

 

한줄에 출력하기

 

이전 반복문 때의 기억을 살려서 위와 같이 코딩하면 0 이상 3 미만이라는 범위가 적용되어 한줄씩 출력된다.

이런 것을 그냥 한줄로 출력하려면 이 또한 콤마(,)를 사용한다.

 

print i 뒤에 , 붙이면 한줄에 출력이 된다.

 

 

 

파일 I/O

 

 

위에서의 입출력은 사용자로부터 키보드로 입력을 받고 모니터로 출력하는 형태였다. 하지만 프로그램에는 파일로 입/출력을 하는 경우도 있다.

따라서 파일 I/O에 대해 배워야 한다.

 

 

 

왼쪽 사진이 바로 파일을 생성하는 기본적인 문법이다. 1라인에서 보이는 open 함수는 파일을 생성/열기 위한 내장 함수이다.

2라인에서의 close는 열린 파일 객체를 닫아주는 것으로 파이썬에서 프로그램이 종료될 때 열린 파일을 자동적으로 닫아주기 때문에 생략이 가능하지만

직접 열린 파일을 닫아주는 것이 좋다. w 모드(아래에서 나옴)로 열엇던 파일을 닫지 않고 다시 사용하려 하려면 에러가 나기 때문이다.

 

1라인에서의 open 함수는 다음과 같은 구조를 가진다.

파일 객체 변수 = open (파일 이름, 모드)

변수와 이름은 프로그래머가 마음대로 바꿀 수 있지만 모드는 그렇지 않다. 모드는 다음과 같이 정해진 값을 갖는다.

 

 

모드 

설명 

r

  읽기 모드 : 파일을 읽기만 할 때 사용

  쓰기 모드 : 파일을 쓸 때 사용

  추가 모드 : 파일의 마지막에 새로운 내용을 추가 할 때 사용 

 

 

파일을 w 모드로 열게 되면 해당 파일이 이미 존재하는 경우 원래 있던 내용이 사라지게 되고, 해당 파일이 존재하지 않는 경우에는 새로운 파일이 생성된다.

위의 샘플에서는 "New File.txt" 라는 파일을 w 모드로 열었기 때문에 새로운 파일이 현재 디렉토리(해당 파이썬 코드가 코딩된 파일의 경로)에 생성되었다.

 

만약, 파일을 열 때 경로를 직접 지정하고 싶은 경우에는 다음과 같이 경로를 추가하면 된다.

 

 

 

 

파일 열 때 출력값 지정

 

위에서는 파일을 생성만 했지 별 다른 내용을 쓰지 않았다. 파일 생성시 내용을 쓰려면 다음과 같이 코딩한다. (물론 w/a 모드로 열어야 함)

 

 

왼쪽 사진처럼 코딩하면 미리 값을 넣을 수 있고 결과가 오른쪽 화면이다. 문법상 fopen과 fclose 사이에 넣어주고 싶은 값을 입력 후 write 함수로 넣으면

된다. 즉, 위의 코드에서는 1 ~ 10 까지의 범위를 지정하여 이게 몇 번째 라인이가 출력하는 것을 line 변수에 대입한다.

그 다음 write 함수를 이용하여 f 변수(현재 f변수는 1라인에서 연 파일이 대입되어 있음)에 line 변수 값을 쓴다.

 

 

 

 

 

파일을 읽는 방법

파이썬에서 파일을 읽는 방법은 여러가지가 있다. 자세히 알아보자

 

 

 

 

readline() 사용

 

위에 만들었던 New File3.txt 가 아직 있다면 위의 프로그램을 실행시켰을 때 "New File3.txt"의 첫 번째 줄을 읽어서 화면에 출력한다.

2 라인에서 파일을 읽기 모드로 열어서 열린 파일을 f 객체로 돌려주고, f를 이용하여 파이르이 한줄을 읽는 함수인 readline()을 사용한다.

 

 

만약 첫 번째가 아닌 모든 라인을 읽어서 화면에 출력하고 싶다면 다음과 같이 작성한다.

 

while True(혹은 while 1) 이라는 무한루프를 이용하여 f.readline()을 이용하여 파일을 한줄씩 읽는다. 5 라인에 의거하여 더 이상 읽을 라인이 없으면

break를 수행한다. 즉, readline() 함수는 파일의 내용을 한 줄씩 읽는다.

 

 

 

readlines() 사용

 

readlines() 함수는 lines, 즉 line의 복수이다. 읽기 모드로 열린 파일의 모든 라인을 한꺼번에 읽어서 출력한다.

 

 

 

read() 이용

 

read() 함수는 파일을 전부 읽고 문자열을 돌려준다. 따라서 2 라인의 data는 파일 전체의 내용이다.

 

 

 

 

 

 

파일에 새로운 내용 추가하기

'w' 모드로 파일을 열었을 경우에는 이미 존재하는 파일을 연 경우 그 파일의 내용이 모두 사라지게 된다. 그러나 이미 존재하던 값을 유지하면서

단지 새로운 값만 추가하기를 원할 수도 있다.

 

 

 

왼쪽 사진을 보면 "New File3.txt" 라는 파일을 추가모드('a')로 열은 파일 객체 (f)를 생성한 다음, 관련 함수인 write를 이용해서 결과값을 파일에 적는다.

추가 모드로 열었기 때문에 원래 가지고 있던 내용 바로 다음에 결과값을 적기 시작한다.

 

 

 

 

 

Tell / Seek 함수의 사용

Tell    => 지금 현재 파일의 포인터의 위치를 반환

Seek  => 지정하는 곳으로 포인터의 위치를 변환한다.

* 파일 포인터란?    파이르이 현재 위치를 가리킴

 

 

 

우선 test.txt 라는 파일을 쓰기 모드로 열고, write 함수를 이용하여 총 3개의 값을 입력하였다. 현재 test.txt 파일에는 각각의 값이 1줄씩, 총 3줄이 존재한다.

 

 

처음에 파일을 읽기 모드로 열었고, 그 파일 포인터 값을 얻기 위하여 tell 함수를 호출한다. 물론 파일의 맨 처음이기 때문에 0를 반환한다.

 

 

라인 1을 읽어온다. 그 담의 파일 포인터는 그 줄의 바이트 수만큼 포인터가 증가한다. (개행문자인 '\n' 도 포함)

따라서 tell의 값은 18이다.

 

 

라인 1~2를 읽어온다. 마찬가지로 파일 포인터 값은 28이 된다.

 

 

파일 포인터의 값을 변환시키기 위하여 seek 함수를 사용한다. f.seek(0)은 파일 포인터의 위치를 0으로 세팅한다.

따라서 다음에 한 줄을 읽었을 때는 그 파일의 맨 처음 줄을 읽게 된다.

 

 

 

 

 

 

sys모듈 사용

 

sys 모듈은 파이썬에서  OS 내장 명령어를 사용하기 위해 사용된다. 즉, pign 이라던지 type 등 도스 명령어를 사용할 수 있게 해준다.

 

 

파이썬에서 특정 모듈을 사용하려면 모듈을 import 해야 한다. 즉, sys 모듈이 제공하는 기능을 사용하려면 "import sys"를 해줘야 한다.

위의 프로그램을 study.py로 저장하고 이를 cmd 창에서 아래와 같이 파라미터 값과 실행한다.

 

sys 모듈의 args는 cmd 창에서 입력한 인수들의 리스트를 나타낸다.

즉, argv[0]는 파일 이름인 study.py가 되고, argv[1] 부터는 뒤에 따라오는 인수들이 차례로 대입된다.

 

 

 

 

 

 

 

위의 프로그램은 입력 값을 모두 대문자로 변환하여 출력한다.

'Developing > Python_배우기' 카테고리의 다른 글

Python 10 - 모듈  (1) 2014.02.03
Python 09 - 클래스  (0) 2014.01.26
Python 07 - 함수  (0) 2014.01.12
Python 06 - 제어문 (for)  (0) 2014.01.12
Python 05 - 제어문 (while)  (0) 2014.01.12