PIL이라는 라이브러리와 natsort라는 라이브러를 사용하여,

 

 

아주 쉽게 PDF파일을 만들어내는 스크립트.

import os
from PIL import Image
import natsort


realpath = "/Users/1111964/Downloads/images"
originimages = natsort.natsorted(os.listdir(realpath))
images = []

for i in originimages:
    try:
       print (i)
       print (Image.open (realpath + '/' + i))
       images.append(Image.open (realpath + '/' + i))
    except:
       print ("error : " + i)


images[0].save(
    realpath +"/out.pdf", "PDF", resolution=100.0, save_all=True, append_images=images[1:]
)

 

ㅇ 당연한것이지만 image, narsort에 대한 PIP 라이브러리 설치가 선행되어야 한다.

ㅇ 이미지 파일들이 모아놓은 폴더 주소를 딴다. 여기서는 맥북 기준으로 "/Users/1111964/Downloads/images"를 사용했다. 윈도우면 "C:\\Users\\USER\\Downloads" 대략 이런식으로 폴더 지정 하면 된다"

 

 

ㅇ이름이나 저장경로를 바꾸고 싶으면 realpath +"/out.pdf" 이부분을 손봐주시면 되겠다. 여기는

이미지가 모여있는 폴더에서 out.pdf라는 파일로 저장하겠다는 것이다.

 

 

 

 

 

chatgpt 명령한것과 똑같은 효과를 두는

open api chatCompletion 호출 사용의 예제이다. 매~우 간단함

 

다만, 챗gpt는 원래 대화방 단위로 사용자와의 대화이력을 이어갈수 있다.

그러면 앞서 나누던 대화의 맥락을 이어갈수 있다.

 

message에 role:user와 role:assistant에 대화를 누적해가며 계속 호출하면되는데

대화방 컨텍스트에 따른 대화이력 저장방식이 필요함으로 

 

여기서는 단순 1회성 호출만 소개한다.

import os
import openai
import datetime
openai.api_key = os.getenv("OPENAI_API_KEY") #부여 받은 api key, 이걸 기준으로 과금된다.
로컬에 환경변수에 저장된 key를 가져오도록 해놨다. 

#openai.organization = "org-cT1P어쩌고L"  #api key의 계정-조직의 id, 
#지금처럼 주석으로 막아놓듯이 선언을 따로 안하면 open ai에 세팅된 디폴트 organizaion을 사용한다.

inputPrompt = "자기 소개서 잘 쓰는법 알려줘"           # reqeust 문장
model = "gpt-3.5-turbo"                                          # 모델선택 gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301


# massage는 복수형 array인데, user와 assistant의 대화 히스토리를 통째로 보내서 
요청할수 있는 구조이다. 여기선 1회성 호출만 하도록 role user의 명렁 1개만 넣어 호출한다

completion = openai.ChatCompletion.create(
  model=model,
  temperature=0,
  messages=[
    {"role": "user", "content": inputPrompt}
  ]
)
result = completion.choices[0]
# 결과는 복수개를 돌려준다, 이중에 최상단 1개값만 가져온다


#print (result)
# 결과값은 obect로 되어있다. 주석처리하여 따로 보지않도록 해놨고 보고싶으면 주석해제하면됨

print (result.message.content)
# 결과값에서 assistant 응답메세지만 가져온다

print(datetime.datetime.now())
# 그냥 현재 시간 표시용

*openai.api_key는 open ai에서 발급받아 사용하며, 유료 호출이다.  gpt-3.5의 경우 매우 저렴하기에 딱히 별 이슈가 없다.

*api_key는 local에 저장된 환경변수를 가져다 쓰는 방식이 스탠다드다, 윈도우는 환경변수로 key를 넣는게 매우 쉽고, MAC은 터미널로 좀 까다로운 작업이 필요함,  잘 모르겠으면 그냥 open ai의 api key 를 그대로 = 뒤에다가 string으로 붙여서 써도 된다.

다만 이럴경우 스크립트를 온라인으로 그대로 공유할때 api key가 공개됨으로 남이 막 쓸수있다. 유료라서 과금이 되니 문제가됨

 

message의 role user의 content에 명령어를 넣고,

결과는 completion이 복수형으로 나오는데, 이중에 만앞에꺼면 뽑아서 message.content를 출력하면 된다.

 

 

 

 

Markup 마크업 언어

 데이터를 화면에 표시하기 위해서 사용하는 언어이다.

Mark로 둘러싸인, 테그로 둘러쌓인 언어를 뜻한다.  논리와 로직을 수행하는 액션이 아닌, 프론트화면에서 정보를 표시하기 위한 언어다

그래서 마크업 언어 만 가지고는 "프로그래밍한다"라고하지않는다. (html언어로 웹화면을 그리는걸 프로그래밍한다고는 하지 않는다)

 

마크업 언어의 예제

대표적으로 html, XML

 

html : 우리가 가장 쉽게 접할수 있는 웹페이지에서 가장 많이 사용되는 언어로, 웹개발이 거의 필수적인 요소,

어드민에서 에디터로 꾸미는 데이터도 대부분 html로 전환되어 표시된다.

 

xml : eXtensible Markup Language 의 약어로, 특수목적, 다목적 마크업 용도로 권장되는 언어포맷이다.

다량의 데이터에 대한 메타정보 표시에 큰 장점이 있으며, 이를통해 데이터의 웹전송, 특히 음악이나 비디오등의 대량 콘텐츠의 메타정보를 다루는것에 매우 잘 쓰이고있다. 대표적으로DDEX 규긱

 

json : 서버 개발과 관련하여 가장 흔하게 보게 될 데이터포맷, 가벼워 성능이 좋고,  가시성이 매우 뛰어나 데이터 송수신의 규칙으로 아주 많이 쓰이는 포맷으로, 서버API 규격을 보면 json으로 된 경우를 아주 흔하게 볼수있다

 

yaml : json과 비슷한 마크업언어로 json의 상위호환으로 yaml->json 변환도 지원된다. 주석을  쓸수있고, 따옴표, 기호등이 단순화되어가독성이 좀더 좋아졌다. 

데이터 직렬화는 불편하여 API  규칙으로는 거의 안쓰이지만,

설정파일로서는 잘 쓰이는 편이라고한다

 

 

Mark Down 마크다운 언어

텍스트 기반의 경량화된 마크업 언어의 파생형이다.

간단한 문법으로 텍스트 중심의 표현을 할수 있어,  위키류 문서, 노션, 깃허브 등의 문서관리에서 자주 사용하게 된다.

보통 개발소스에 대해 설명해둔 깃허브 md파일이 마크다운 언어 파일이다

 

html처럼 복잡한 테그와 디자인 언어를 필요로 하지 않음과 동시에

gui에디터처럼 제약이 높지 않다.

 

 

 

 

 

 

 

 

 

 

 

'IT 지식 > 간단한 지식 정리' 카테고리의 다른 글

동기/비동기/콜백  (0) 2021.01.15
검색 모델링  (0) 2020.04.24

+ Recent posts