코딩할 때 실행한 결과를 화면이나 파일로 출력해야 할 때가 있습니다. 또한 입력을 키보드로 받거나 파일에 있는 데이터를 읽어서 처리해야 할 때도 있습니다. 이번 장에서는 파이썬으로 코드를 작성할 때 키보드와 화면으로 입출력하는 방법을 살펴보겠습니다.
화면 출력
작성한 코드의 결과를 확인하는 가장 기본적인 방법은 결과를 화면으로 출력하는 것입니다. 파이썬에서는 print()함수를 이용해 원하는 내용을 화면으로 출력할 수 있습니다. print() 함수에는 출력 형식을 지정하지 않는 기본출력 방법과 다양한 형식으로 출력할 수 있는 형식 지정 출력방법이 있습니다. 이 두 가지 방법에 대해 모두 알아보겠습니다.
기본 출력
먼저 print() 함수의 기본 출력 방법을 이용해 문자열과 숫자를 출력하는 방법을 알아보겠습니다. 문자열을 출력하려면 앞에서도 살펴봤듯이 문자열을 print() 함수 안에 넣으면 됩니다.
In : print("Hello Python!!") Out : Hello Python!! |
문자열 여러 개를 연결해 출력하려면 문자열을 콤마(,)로 구분하고 연속해서 입력합니다. 콤마로 구분하면 출력에서 자동으로 빈칸(공백)이 하나씩 들어갑니다.
In : print("Best","python","book") Out : Best python book |
만약 빈칸 대신 다른 문자열을 넣으려면 print() 함수 안에 두 문자열 사이의 구분하는 값을 설정하는 sep 인자를 이용합니다. print() 함수에서 sep 인자를 지정하지 않으면 기본적으로 빈칸이 들어갑니다. 빈칸을 다른 문자열로 바꾸려면 'sep=문자열'을 추가합니다.
In : print("Best","python","book", sep="-:*:-") Out : Best -:*:- python -:*:- book |
위의 결과에서 sep 인자에 지정한 문자열(-:*:-)로 입력한 세 개의 문자열이 연결돼 출력됐습니다. 만약 빈칸 없이 두 문자열을 연결하려면 콤마 대신 더하기 연산자를 이용합니다.
In : print("abcd"+"ef") Out : abcdef |
변수에 저장된 내용을 출력하려면 print() 함수에 변수를 인자로 넣습니다. 단, 변수 이름을 이용해 출력할 때는 따옴표가 없어야 합니다.
In : x=10 print(x) Out : 10 |
문자열과 숫자를 함께 출력하려면 둘을 콤마로 구분해서 print()함수의 인자로 넣습니다. 문자열과 문자열은 더하기 연산자로 공백 없이 연결해서 출력할 수 있지만 문자열과 숫자는 더하기 연산자로 연결할 수 없습니다.
In : name="James" |
지금까지 print() 함수를 이용해 문자열을 출력할 때 결과가 한 줄씩 출력됐습니다. 만약 print() 함수를 하나만 이용해서 문자열을 여러 줄로 출력하려면 어떻게 할까요? 문자열 안에 줄 바꿈 표시인 개행문자(\n)를 입력하면 출력할 때 줄이 바뀝니다.
In : print("James is my friend. \nHe is Korean.") Out : James is my friend He is Korean. |
개행문자(\n)를 하나 더 추가하면 다시 줄 바꿈을 합니다. 따라서 다음처럼 개행문자(\n)를 두 개 입력하면 줄 바꿈이 두 번 발생해 한 줄을 띄우게 됩니다.
In : print("James is my friend. \n\nHe is Korean.") |
줄을 바꿔서 출력해야 할 때도 있지만 줄을 바꾸지 않고 출력해야 할 때도 있습니다. 파이썬 print()함수는 기본적으로 다음 출력을 위해서 줄을 바꿔 놓으므로 다음처럼 print() 함수를 두 개 사용해 문자열을 출력하면 두 줄로 출력됩니다.
In : print("Welcome to") print("python!") Out : welcome to python! |
이처럼 두 줄로 출력된 결과를 한 줄로 출력하려면 print() 함수 안에 라인 끝의 값을 지정할 수 있는 end 인자를 추가합니다. print() 함수에서 end 인자를 지정하지 않으면 기본적으로 라인 끝에 개행문자(\n)가 들어갑니다. 개행문자(\n) 대신 다른 문자열을 입력하려면 'end=문자열' 형태로 end 인자에 다른 값을 넣습니다. 따라서 다음 예제처럼 print() 함수 안에 『end=" "』를 추가하면 라인 끝에 어떤 문자도 넣지 않았으므로 그 다음 print() 함수를 실행하면 줄 바꿈 없이 연결되어 출력됩니다.
In : print("Welcome to",end=" ") print("python!") Out : Welcome to python! |
형식 지정 출력
파이썬의 print() 함수에서 문자열에 데이터가 출력될 위치와 형식을 지정하는 방식으로도 데이터를 출력할 수 있습니다. 데이터의 출력 형식을 지정하는 방법으로 파이썬 버전 2.x와 3.x에서 모두 이용할 수 있는 나머지 연산자를 이용하는 방법과 버전 3.x에서만 지원되는 형식 지정 문자열을 이용하는 방법이 있습니다.
나머지 연산자(%)를 이용한 형식 및 위치지정
나머지 연산자는 print() 함수에서 데이터의 출력 형식과 위치를 지정할 때도 사용합니다. 이 방법은 파이썬 2.x 버전에서부터 이용한 방법입니다. 파이썬 3.x에서는 좀 더 유연하게 문자열 형식을 지정할 수 있는 'string.format()' 방법이 있기에 나머지 연산자를 이용한 출력 방법은 간단히 알아보겠습니다.
print() 함수에서 나머지 연산자를 이용해 데이터의 출력 형식과 위치를 지정하는 기본 구조는 다음과 같습니다.
print("%type"%data) |
위의 print() 함수의 인자에는 두 개의 %가 있습니다. 첫 번째는 따옴표로 둘러싼 문자열 '%type'에서 사용했고 두 번째는 '%data'에서 사용했습니다. 여기서 따옴표와 '%data'사이에 콤마가 없고 공백이 있다는 점에 유의하시길 바랍니다. 또한 '%type'은 data 형식에 따른 다른 값을 지정해야 합니다. data가 문자열이면 %s를, 정수이면 %d(혹은 %i)를, 실수이면 %f(혹은 %F)를 지정합니다. 실수의 경우 %f로 표시하면 기본적으로 소수점 6자리까지 출력합니다.
data가 두 개 이상이면 따옴표로 둘러싼 문자열 안에 data의 개수에 맞게 '%type'를 순서대로 입력하고 튜플 형식으로 data를 묶어서 이용합니다. 다음은 print() 함수에서 data가 두 개일 때 나머지 연산자를 이용해 data를 출력하는 형식과 위치를 지정하는 구조의 예입니다.
print("%type%type"%(data1,data2)) |
다음은 %s를 이용해 문자열을 대입한 변수를 출력한 예입니다.
In : name="광재" print("%s는 나의 친구입니다." %name) Out : 광재는 나의 친구입니다. |
위의 출력 결과에서 %s 자리에 변수 name에 할당된 문자열이 출력됐습니다.
다음은 %d와 %f를 이용해 정수와 실수를 출력한 예입니다.
In : r=3 PI=3.14159265358979 print("반지름:%d, 원주율:%f" %(r,PI)) Out : 반지름:3, 원주율:3.141593 |
위의 출력 결과에서 %d 자리에 변수 r에 할당된 정수가, %f 자리에 변수 PI에 할당된 실수가 각 형식에 맞게 출력된 것을 볼 수 있습니다. 여기서 실수의 경우는 소수점 6자리까지만 출력된 것을 볼 수 있습니다.
형식 지정 문자열에서 출력 위치 지정
다음으로 출력 양식을 좀 더 자유롭게 표현할 수 있는 형식 지정 문자열을 이용하는 방법을 살펴보겠습니다. print() 함수에서 'string.format()'을 이용하는 형식 지정 문자열의 기본 구조는 다음과 같습니다.
pirnt("{0} {1} {2} … {n}".format(data_0, data_1, data_2, …, data_n)) |
여기서 {N}의 N은 0부터 시작하는 숫자로 format()에서 데이터의 위치(0부터 시작)를 의미합니다. 이처럼 형식을 지정하면{N}에는 format()에서 N에 해당하는 위치의 데이터가 들어가서 출력됩니다. 예를 들어, {0}에는 data_0가 출력되고 {1}에는 data_1이 출력됩니다. 그리고 {n}에는 data_n이 출력됩니다.
다음은 형식 지정 문자열의 구조인 'string.format()'으로 데이터를 출력한 예입니다.
In : animal_0="cat" animal_1="dog" animal_2="fox" print("Animal: {0}".format(animal_0)) print("Animal: {0},{1},{2}".format(animal_0, animal_1, animal_2)) Out : Animal: cat Animal: cat,dog,fox |
위의 결과에서 지정한 순서대로 데이터가 잘 출력됐습니다. 다음과 같이 {N}의 위치를 변경하면 데이터의 위치를 변경할 수 있습니다.
In : print("Animal: {1},{2},{0}".format(animal_0, animal_1, animal_2)) Out : Animal: dog,fox,cat |
위의 코드에서는 '{1},{2},{0}'는 format()안의 변수를 '두 번째, 세 번째, 첫 번째' 순서로 출력하라는 의미입니다. 결과를 보면 지정한 순서대로 출력된 것을 볼 수 있습니다. 또한 format() 안에 데이터의 내용 중 일부만 출력할 수도 있습니다.
다음의 예를 살펴보겠습니다.
In : print("Animal: {0},{2}".format(animal_0, animal_1, animal_2)) Out : Animal: cat, fox |
위의 출력된 결과를 보면 첫 번째와 세 번째 데이터만 출력된 것을 볼 수 있습니다.
앞에서는 {N}으로 format() 안의 데이터 순서를 지정했습니다. 그런데 만약 format() 안의 데이터를 순차적으로 지정하려면 {N}에 N 없이 {}만 써도 됩니다.
다음은 세 개의 {}를 이용해 데이터를 순서대로 출력한 예입니다.
In : print("Animal: {},{},{}".format(animal_0, animal_1, animal_2)) Out : Animal: dog,fox,cat |
지금까지 'string.format()' 방식을 이용해 문자열을 출력하는 방법을 살펴봤습니다. 문자열뿐만 아니라 정수나 실수도 'string.format()' 방식을 이용해 출력할 수 있습니다. 기본 출력 양식을 그대로 이용하면 출력 형식을 별도로 지정하지 않아도 됩니다. 단지 {N}를 이용해 변수를 출력할 위치만 지정하면 됩니다.
다음 예를 살펴보겠습니다.
In : name="Tomas" age=10 a=0.1234567890123456789 fmt_string="String: {0}.Integer Number: {1}.Floating Number: {2}" print(fmt_string.format(name, age, a)) Out : String: Tomas. Integer Number: 10. Floating Number: 0.12345678901234568 |
위의 코드는 지금까지 출력한 방법과 다르게 print() 함수에서 이용할 문자열을 fmt_string 변수에 대입한 후 이를 이용했습니다. 위에서처럼 {N}으로 데이터의 출력 위치만 지정하면 변수의 데이터 타입을 지정하지 않아도 데이터의 타입에 따라 자동으로 알아서 출력해줍니다. 실수의 경우 기본적으로 소수점 17자리까지 표시됩니다. 그 이상의 소수점 숫자는 반올림돼 출력됩니다.
출처 : 데이터분석을 위한 파이썬 철저 입문 中