본문 바로가기

Program Languages/Python

파이썬 print 함수로 문자 출력하기

파이썬의 언어를 물론 GUI를 사용할 때도 있지만 웬만하면 파이썬 관련 처리는 CLI(Command Line Interface)에서 처리합니다.

 

따라서 파이썬을 출력할 때 문자를 출력하는 일은 생각보다 중요합니다.

 

print 함수 기본 사용법

변수 = "문자열"
변수2 = [1,2,3]
print(변수)
print(변수2)
print(변수2[0],변수2[1],변수2[2])
print(*변수2)
print(1.01)
print("출력")

와 같은 방법으로 출력하시면 간단하게 해당 변수의 값을 출력할 수 있습니다.

이때 물론 문자열 포맷을 이용하는 방법을 추가할 수도 있지만 문자열 포맷을 사용하는 것은 추후에 문자열관련 포스트에서 다루도록 하겠습니다.

 

하지만 이렇게만 CLI창에 출력을 한다면 간혹 불충분할 때가 있습니다.

 

따라서 이번 포스트에서는 print함수의 설정 가능한 상세한 매개변수를 알아보려고 합니다.

 

print 함수 매개변수

매개변수 이름 데이터 타입 설명
*objects 아무 형식 출력할 변수들 혹은 값들을 나열하는 매개변수
sep 문자열 각각의 변수들 사이를 구분시켜주는 문자열 매개변수
end 문자열 변수들이 print되고 나서 해당 줄에 마지막에 어떤 문자를 추가로 출력할지 결정해주는 문자열 매개변수
file 파일 서술자 객체 print함수를 어디로 출력을 할지 결정해 주는 매개변수
flush 불리언 값 저장장치의 읽기/쓰기 속도나 수명증가등을 위해 print함수가 출력이 논리상 완료된 후  출력된 문자열 일부가 잠시동안 버퍼에 저장이 되어 있는데, 버퍼에 일부를 쌓아두지 않고 바로 file매개 변수쪽으로 문자열을 출력해줄지 말지 결정해 주는 매개변수

이때 *objects는 파이썬의 패킹기술로써 다른 언어로 치면 가변 매개변수를 담당하고 있습니다.

따라서 함수가 가변 매개변수를 사용하는 경우, 매개변수에 sep,end,file,flush등 특정 매개변수 이름을 지정한 뒤 매개변수를 지정하지 않으면 코더가 얼마나 변수를 매개변수로 나열하든 자동적으로 *objects로 패킹이 됩니다.

파이썬 패킹에 대해 자세한 것은 추후 포스트에서 언급하도록 하겠습니다.

 

또한 file매개변수에 대입할 수 있는 기본적으로 불러올 수 있는 변수들은 여러가지가 있지만 대략적으로

변수명 설명
sys.stdout cli에서 기본적인 문자를 출력할 디바이스와 연결 및 코드 구현되어 있는 객체
sys.stdin cli에서 문자를 입력받기 위한 디바이스와 연결 및 코드 구현되어 있는 객체
sys.stderr cli에서 에러같은 문자를 별도로 출력하기 위한 디바이스와 연결 및 코드 구현되어 있는 객체

이며 왜 매개 변수 키명이 device나 pipe등이 아니라 file인지는 나중에 c언어와 운영체제 관련 포스트에서 다루도록 하겠습니다.

 

이때 중요한 것은 출력할 내용을 콘솔 창이 아닌 다른 곳에서도 출력할 수 있다는 점입니다.

즉, 출력할 내용을 거의 그대로 파일에 출력해 저장하거나 다른 프로그램에게 출력 결과를 전송해 줄 수 있다는 것 입니다.

 

이때, 이 포스트에서는 print함수를 이용해 파일에 내용을 출력 및 저장하는 예제까지 다루도록 하겠습니다.

 

 

파일에 내용 쓰는(write) 방법

with open("filename.txt","w") as fd:
	fd.write("hello")

여기서는 filename.txt라는 디바이스(파일)과 파이썬을 연결해주는 일종의 파일 서술자 객체를 이용해 hello라는 문자를 filename.txt 쓰기 및 저장하는 예제입니다.

print함수와 같이 쓰기 위해서는 print함수를 사용하실때 최종적으로 매개변수file=fd 로 설정해주시면됩 니다

이때, 파일 기술자는 텍스트전용 파일 기술자 혹은 모드이어야 print함수가 제대로 작동합니다.

 

매개변수 설정을 통한 print함수 추가 사용법

import sys
변수1 = 123
변수2 = "문자열"
print(변수1,변수2)
print(변수1,변수2,sep="  |  ",end=("\n"+"="*10+"\n"),file=sys.stdout,flush=True)

결과를 보자면 변수1과 변수2를 출력하는 사이에 sep매개변수 문자열이 추가되고 출력될 내용 마지막에 end매개변수에 해당하는 문자열이 추가되는 것을 알 수가 있었습니다.

 

마지막으로 이러한 매개변수 설정과 파일 읽기 객체를 이용하는 한 사례를 알아보도록 하겠습니다.

각 매개변수를 사용해 콘솔과 파일에 출력해보는 예제

import sys
def happyChristmas_0xFF01(blank_str="  ",fp=sys.stdout,flush_option=False):
    width = 10
    트리기둥높이 = 7
    트리기둥너비 = 5
    indent = width-1
    header_text_section = 4
    print("+"*header_text_section,end="  ",file=fp,flush=flush_option)
    print("Happy","Christmas!",sep=" * ",file=fp,end="  ",flush=flush_option)
    print('+'*header_text_section,end="\n"*4,file=fp,flush=flush_option)
    for W in range(2,2*width+1):
        print((blank_str*(indent))+(chr(0x2606) if(W<3) else blank_str.join([chr(0x25A9)]*(W//2))),file=fp,flush=flush_option)
        indent-=W%2==1
    indent = (width+트리기둥너비)//2
    post_processing_in_lines = [
        "",
        " "+chr(0x1F47C)+chr(0x1F3B6),
        "",
        "",
        "",
        blank_str*5+chr(0x1F514)+chr(0x1F381),
        blank_str*3+chr(0x1F385)+chr(0x1F98C)+chr(0x1F6F7),
    ]
    for h in range(트리기둥높이):
        indents = (blank_str*indent)
        indents = [indents[offset:offset+len(blank_str)] for offset in range(0,len(indents),len(blank_str))]
        if(h in [0,트리기둥높이-1]):
            indents.pop()
            indents[0] = chr(0x1F381 if (h > 0) else 0x1F9E6)
        
        print("".join(indents)+(chr(0x25A5)*pillar_width),end=((post_processing_in_lines[h]))+"\n",file=fp,flush=flush_option)
def main():
    happyChristmas_0xFF01(blank_str=" ")
    with open("happy_cristmas.txt","w") as fp:
        happyChristmas_0xFF01(blank_str="   ",fp=fp)
if(__name__=="__main__"):
    main()

콘솔과 텍스트 파일에 큰 문제없이 잘 출력되는 것을 볼 수가 있었습니다.