본문 바로가기

Programming/Python

입력과 출력

입력과 출력

프로그램을 만들다 보면 간혹 프로그램이 사용자와 상호 작용을 해야 할 떄가 있다.
예를 들어 , 사용자로부터 뭔가를 입력받고 처리 결과를 출력해 주는 것 같은 일이 필요할 때 입니다.
파이썬에서는 이를 위해 input()함수와 print()문을 이용한다.

결과를 출력해주기 위해서는 str( 문자열 ) 클래스가 제공하는 여러 메소드를 사용할 수도 있다.
예를들면 , rjust 메소드를 사용하여 출력될 문자열이 특정 폭의 문자열 안에서 오른쪽 정렬되도록 할 수 있다.


사용자로부터 입력받는 예제를 살펴보자.


def reverse(text):
return text[::-1] # 입력받은 text를 뒤집는 함수

def is_palindrome(text):
return text == reverse(text) # 회문이 맞는지를 확인하는 함수

something = input("Enter text:")
if is_palindrome(something):
print("yes , it is a palindrome")
else:
print("No , it is not a palindrome")

입력받은 문자가 회문인지 확인하는 코드다.
문자열을 뒤집기 위해서는 슬라이싱을 이용한다 .  앞서 보았듯이 열거형의 슬라이스 기능을 이용하여 seq[ a : b ]와 같은 코드를 통해
위치 a부터 b까지 문자열을 얻어올 수 있다. 슬라이스 숫자에 세번째 인수를 넘겨주어 슬라이스 스텝을 지정해 줄 수 있다.

스텝을 지정하지 않으면 기본값 1이 지정되며 , 이 경우 지정된 문자열을 차례로 슬라이스 하는 것을 의미한다.
음의 스텝을 지정하면 열거형의 마지막부터 반대 방향으로 슬라이스가 진행되며 , 예를 들어 -1을 지정하면 뒤집혀진 문자열이 반환된다.


input()함수는 인수로 넘겨받은 문자열을 화면에 표시해준다 , 그리고 나서는 사용자가 무엇을 입력하고 엔터를 누를때 까지 기다린다.
사용자가 입력을 마치고 엔터키를 누르면 input()함수는 사용자가 입력한 내용을 문자열로 반환해준다.


이제 이 문자열을 받아서 뒤집어준다  , 여기서 뒤집혀진 문자열이 뒤집혀지지 않았을 때의 문자열과 동일할때 , 
이것은 영어로 palindrome 이라고 부른다.



파일 입/출력

입/출력을 위해 파일을 열고 사용하려면 file 클래스의 객체를 생성한 후 read , readline , write 와 같은 메소드들을       

적절히 활용하면 된다.

파일을 열때 파일을 읽는 모드와 쓰는 모드를 따로 지정해 줄 수 있다.
마지막으로 파일을 읽거나 쓰는 일을 모두 마친 후에는 , close메소드를 호출하여 파이썬에게 그 파일을 다 사용했음을 알려줘야 한다.

# open for 'w'riting
f = open('poem.txt','w')
# write text to file
f.write("poem......")
#close the file
f.close()

#If no mode is specified , 'r'ead mode is assumed by defalut
f=open('poem.txt')
while True:
line = f.readline()
if len(line) == 0:
break
print(line)

f.close()

먼저 , 내장함수 open()을 이용하여 파일을 열어준다 , 이때 파일을 어떤 용도로 사용할 것인지도 함께 지정해줘야 한다.
각 모드로는 읽기모드( ' r ' ) , 쓰기 모드 ( ' w ' ) , 덧붙임 모드( ' a ' ) 등이 있다.
( 'r' = read , 'w' = write , 'a' = append )

또한 우리가 다룰 파일을 일반적인 텍스트 모드로 ( ' t ' )로 다룰지 또는 바이너리 모드 ( 'b')로 다룰지 여부도 함께 지정해 줄 수 있다.

이외에도 여러가지 다른 모드들이 있으며 , help(open)을 통해 그 목록을 확인해 볼 수 있다.
모드에 아무거도 지정해주지 않으면 , open()은 기본적으로 파일을 텍스트('t'ext)모드의 읽기('r'ead)모드로 파일을 열어준다.

위 예제는 먼저 파일을 쓰기/텍스트 모드로 열고 파일 객체의 write 메소드를 사용하여 파일에 써준 후 close로 파일을 닫아준다.


다음으로는 , 똑같은 파일을 이번에는 읽기모드로 연다.    이 때 아무 모드도 지정하지 않았는데 이렇게 하면 기본값인 '읽기/텍스트 모드'가 지정된다.    파일을 연 후에는 반복문을 이용하여 파일의 readline메소드를 통해 파일의 내용을 한 줄 씩 읽어온다.

만약 빈 문자열이 반환될 경우 , 이것은 파일의 끝임을 의미하는 것이므로 'break'문을 통해 반복문을 빠져나온다.
마지막으로 f.close() 문으로 파일을 닫는다.


Pickle

파이썬은 pickle이라고 불리우는 기본 모듈을 제공하는데 , 이 모듈은 어떤 파이썬 객체이든지 파일로 저장해 두었다가

나중에 불러와서 사용할 수 있게 하는 모듈이다.    이것을 객체를 영구히 저장해 둔다고 한다.


import pickle
#The name of the file where we will store the abject
shoplistfile = 'shoplist.data'
#The list of things to buy
shoplist = ['apple','mango','carrot']

#wrtie to the file
f=open(shoplistfile,'wb')
#dump the object to a file
pickle.dump(shoplist,f)
f.close()

#destroy the shoplist variable
del shoplist

#read back from the storage
f=open(shoplistfile,'rb')
#load the object from the file
storedlist = pickle.load(f)
print(storedlist)

파일에 객체를 저장하기 위해 먼저 open문을 이용하여 쓰기/바이너리 ('wb') 모드로 파일을 열어준 후 

pickle 모듈의 dump 함수를 호출하여준다 , 이 과정을 피클링 이라고 한다.
다음으로 pickle 모듈의 load함수를 이용하여 파일에 저장된 객체를 불러온다.
이 과정을 언피클링 이라고 한다.

'Programming > Python' 카테고리의 다른 글

표준 라이브러리  (0) 2017.11.13
예외 처리  (0) 2017.11.13
상속  (0) 2017.11.13
클래스 변수와 객체 변수  (0) 2017.11.13
객체 지향 프로그래밍 ( Object - Oriented Programming )  (0) 2017.11.12