Python

[Python] [Mini PJT] txt파일에서 고객 정보 추출하여 SQL과 연동

breadz 2021. 7. 20. 21:02

■ 핵심 내용

고객으로부터 사진 편집을 요청하는 이메일이 왔다고 생각해보자,

· 정규표현식을 이용하여 ▶ 발신메일, 고객이름, 사용할 이미지, 원하는 기능, 추가 요청사항 데이터만 추출하고

· python을 oracle과 연동하여 ▶ 테이블로 고객관리를 하려고 한다!

SQL을 이용하면 추후 고객관리가 편리할 것으로 기대되기 때문이다!

(고객 이메일 예시)

customer1 메일 내용
customer2 메일 내용

 


■ 기능 구현 코드

정규표현식을 사용하려면 re 모듈을 import하여야 한다.

import re

 

고객1의 메일(txt 파일)에서 고객정보(발신메일, 고객이름, 사용할 이미지, 원하는 기능, 추가 요청사항)를 list로 추출한다!

f = open('C:/Users/Playdata/.spyder-py3/emailFromCustomer1.txt','r',encoding = 'utf-8')
customer1 = f.read()
char = re.compile(r'발신 :.+')
custEmail_1 = re.findall(char,customer1)

char2 = re.compile(r'고객이름 :.+')
custName_1 = re.findall(char2,customer1)

char3 = re.compile(r'사용할 이미지 :.+')
custImage_1 = re.findall(char3,customer1)

char4 = re.compile(r'원하는 기능 :.+')
custRequirement_1 = re.findall(char4,customer1)

char5 = re.compile(r'추가 요청사항 :.+')
custRemark_1 = re.findall(char5,customer1)

 

고객2의 메일(txt 파일)에서 고객정보(발신메일, 고객이름, 사용할 이미지, 원하는 기능, 추가 요청사항)를 list로 추출한다!

f = open('C:/Users/Playdata/.spyder-py3/emailFromCustomer2.txt','r',encoding = 'utf-8')
customer2 = f.read()
char = re.compile(r'발신 :.+')
custEmail_2 = re.findall(char,customer2)

char2 = re.compile(r'고객이름 :.+')
custName_2 = re.findall(char2,customer2)

char3 = re.compile(r'사용할 이미지 :.+')
custImage_2 = re.findall(char3,customer2)

char4 = re.compile(r'원하는 기능 :.+')
custRequirement_2 = re.findall(char4,customer2)

char5 = re.compile(r'추가 요청사항 :.+')
custRemark_2 = re.findall(char5,customer2)

 

고객 1과 고객 2의 List 요소들을 합친다!

custEmails = custEmail_1 + custEmail_2
custNames = custName_1 + custName_2
custImages = custImage_1 + custImage_2
custRequirements = custRequirement_1 + custRequirement_2
custRemarks = custRemark_1 + custRemark_2

 

만들어진 리스트들로 딕셔너리 변수로 저장하고, 데이터프레임화한다!

import pandas as pd
data = {'custEmails':custEmails,
        'custNames':custNames,
        'custImages':custImages,
        'custRequirements':custRequirements,
        'custRemarks':custRemarks
       }

#DataFrame은 딕셔너리 변수를 2차원 테이블로 만들어준다! (우리가 보는 표 형식!)
df = pd.DataFrame(data)

 

아래는 내 클라우드 서버의 user 정보이다. user로 oracle에 접속하는 코드이다.

#python에서 oracle에 접속하기!
import cx_Oracle

#initialized 시킴
cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_11")

#Oracle에 접속
connection = cx_Oracle.connect(user='ora01', password='****', dsn='edudb_high')
cursor = connection.cursor()

 

oracle에 접속하고나면 cust라는 고객관리 테이블을 생성하고, 컬럼을 추가한다!

컬럼에 df값을 List화시킨 후, insert한다!

#테이블 생성하고 데이터 집어넣기
cursor.execute('''drop table cust purge''')
cursor.execute('''create table cust (custemail varchar2(30)
                                   , custname varchar2(100)
                                   , custimage varchar2(100)
                                   , custrequirement varchar2(100)
                                   , custremark varchar2(100))''')
                                   

test_list = df.values.tolist()

cursor.executemany("insert into cust(custemail,custname,custimage,custrequirement,custremark) values (:1, :2, :3, :4, :5)", test_list)

connection.commit()

 

 


■ 추후 추가되어야 하는 기능

고객은 계속 요청이 올텐데, 그때마다 일일이 txt파일에서 list를 추출하는 과정의 코드를 적을 순 없다!

따라서, 고객 이메일에서 정보들을 추출하는 과정을 for문으로 구현해야 한다.