본문 바로가기

Study/class note

python / open, close

048 파일 열고 닫기(open, close)

파일은 텍스트 파일과 바이너리 파일 두가지 종류가 있음. 텍스트 파일은 사람이 읽을 수 있는 글자로 저장된 파일이고 바이너리 파일은 컴퓨터가 읽고 이해할 수 있는 이진 데이터를 기록한 파일.

예를들어, 윈도우에서 제공하는 메모장 프로그램을 이용하여 내용을 적고 저장하면 텍스트 파일로 저장됨. 이미지 뷰어로 볼 수 있는 jpg 이미지 파일은 이진 데이터를 jpg형식의 파일로 저장한 바이너리 파일임.

 

파이썬에서 파일을 다루기 위해서 가장 먼저 해야할 일은 파일을 오픈하는 것.

> 파일을 오픈하기 위해서 open() 함수를 이용

file = open("c:\\data\\emp2.csv")

# 문법
# file = open(파일위치와 이름, 모드)
#                              r : 텍스트 모드로 읽기
#                              w : 텍스트 모드로 쓰기
#                              rb : 바이너리 모드로 읽기
#                              wb : 바이너리 모드로 쓰기

예제. 바이너리 파일 가져오기

1. 이미지 파일을 c:\\data\\ 밑에 저장

2. 아래의 코드 실행

import PIL.Image as pilimg               # PIL패키지의 Image모듈을 가져와라
import numpy as np                       # 이미지를 시각화 하려면 numpy모듈이 필요
                                         # 넘파이는 행렬계산에 최적화된 모듈 
                                         # >이미지를 다차원 행렬의 숫자값들로 만들어주는 역할
import matplotlib.pyplot as plt          # 데이터 시각화 전문 패키지인 matplotlib의
                                         # pyplot라는 모듈을 임폴트함

im = pilimg.open("c:\\data\\lena.png")   # pilimg 모듈의 open()함수로 이미지를 불러와서
                                         # im 변수에 넣음
pix = np.array(im)                       # im 변수에 있는 숫자값들을 다차원 배열 형태로 변경
plt.imshow(pix)                          # pix 숫자를 이미지로 변환하여 파이썬 화면에 띄움

 

문제186. 구글에서 커피에 관련한 이미지를 다운받아서 c:\\data\\ 에 저장하고 coffee_kiosk()함수를 실행하면 메뉴를 선택하시오라는 메시지 위에 커피이미지가 띄워지게 하시오.

def coffee_image():    
    import PIL.Image as pilimg              
    import numpy as np                     
    import matplotlib.pyplot as plt
    
    im = pilimg.open("c:\\data\\coffee.png") 
    pix = np.array(im)                      
    plt.imshow(pix)
    
    ax = plt.gca()                            # x,y축을 없애는 코드
    ax.axes.xaxis.set_visible(False)
    ax.axes.yaxis.set_visible(False)
    
    plt.show()     # 이미지 출력할때 넣어주면 됨
    
    # 이미지를 coffee_kiosk() 밖의 함수로 만들어서 coffee_kiock()로 만들어주면 됨.
   
   
def coffee_kiosk():
    
    #커피 이미지
    coffee_image()

 

문제187. 커피 키오스크를 수행하면 만들어지는 판다스 원형 그래프를 c:\\data\\에 저장하시오.

    # 원형그래프 
    from matplotlib import font_manager, rc
    import matplotlib.pyplot as plt
    
    font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
    rc('font', family=font_name)    #폰트설정
    
    result = cafe.groupby('커피종류')['가격'].sum().reset_index()
    result.columns=['커피종류','총매출']
    result.plot.pie(y = '총매출',labels = result['커피종류'], startangle=100, autopct='%1.1f%%')
    plt.legend(loc='best',bbox_to_anchor=(1, 1))    # 범례가 너무 멀면 이미지파일 저장시 저장안됨
    plt. title('커피종류별 총 매출액')
    plt.savefig("c:\\data\\coffee_piechart_"+ time+".png", dpi=300)     #파이차트 이미지 자동저장
    													# dpi = 해상도
    return cafe

잉크젯 프린터는 300dpi, 레이저 프린터는 600 dpi를 주로 사용함.

 

문제188. piechart.png도 날짜와 시분초가 이름에 들어가게끔 구성하시오.

    # 원형그래프 
    from matplotlib import font_manager, rc
    import matplotlib.pyplot as plt
    
    font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
    rc('font', family=font_name)    #폰트설정
    
    result = cafe.groupby('커피종류')['가격'].sum().reset_index()
    result.columns=['커피종류','총매출']
    result.plot.pie(y = '총매출',labels = result['커피종류'], startangle=100, autopct='%1.1f%%')
    plt.legend(loc='best',bbox_to_anchor=(1, 1))    
    plt. title('커피종류별 총 매출액')
    time = now[:10]+'일_'+now[11:13]+'시_'+now[14:16]+'분_'+now[17:19]+'초'       #현재시간
    plt.savefig("c:\\data\\coffee_piechart_"+ time+".png", dpi=300)     #파이차트 이미지 자동저장
    													
    return cafe

 

 

 

# 이미지 삽입 시 x,y축 없애기

# 이미지 삽입 시 x,y축 없애기
import PIL.Image as pilimg              
    import numpy as np                     
    import matplotlib.pyplot as plt
    
    im = pilimg.open("c:\\data\\coffee.png") 
    pix = np.array(im)                      
    plt.imshow(pix)
    
    plt.axis('off')    
    
    plt.show()


# 또는

    import PIL.Image as pilimg              
    import numpy as np                     
    import matplotlib.pyplot as plt
    
    im = pilimg.open("c:\\data\\coffee.png") 
    pix = np.array(im)                      
    plt.imshow(pix)
    
    ax = plt.gca()                            # x,y축을 없애는 코드
    ax.axes.xaxis.set_visible(False)
    ax.axes.yaxis.set_visible(False)
    
    plt.show()
반응형