xlsxwriter

!pip3 install xlsxwriter
Collecting xlsxwriter
  Downloading XlsxWriter-1.4.4-py2.py3-none-any.whl (149 kB)
     |████████████████████████████████| 149 kB 7.0 MB/s 
Installing collected packages: xlsxwriter
Successfully installed xlsxwriter-1.4.4
  • workbook
  • worksheet
  • cell
import xlsxwriter
workbook = xlsxwriter.Workbook('test.xlsx')

#파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet('test')

#워크 시트 안에 문자열 값을 넣습니다.
worksheet.write('A1', 'A')
worksheet.write('B1', 'B')
worksheet.write('C1', 'C')
worksheet.write('D1', 'D')
worksheet.write('E1', 'E')

#워크 시트 안에 숫자 값을 넣습니다.
worksheet.write('A2', 1)
worksheet.write('B2', 2)
worksheet.write('C2', 3)
worksheet.write('D2', 4)
worksheet.write('E2', 5)

#워크 시트 안에 숫자 값을 넣습니다.
worksheet.write(2, 0, 1)
worksheet.write(2, 1, 2)
worksheet.write(2, 2, 3)
worksheet.write(2, 3, 4)
worksheet.write(2, 4, 5)

workbook.close()
workbook = xlsxwriter.Workbook('test.xlsx')

#파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet('test')

#워크 시트 안에 숫자 값을 넣습니다.
for i in range(10):
    # worksheet.write(행, 열, 값)
    worksheet.write(i, 0, i + 1)
    worksheet.write(i, 1, 60)

workbook.close()
workbook = xlsxwriter.Workbook('test.xlsx')

#파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet('test')

#워크 시트 안에 숫자 값을 넣습니다.
# worksheet.write(행, 열, 값)
worksheet.write('A1', 1)
worksheet.write('B1', 2)
worksheet.write('A2', '=A1+B1')
worksheet.write('B2', '=A1-B1')
worksheet.write('C2', '=A1/B1')
worksheet.write('D2', '=A1*B1')

workbook.close()
workbook = xlsxwriter.Workbook('test.xlsx')

#파일 안에 워크 시트 생성하기(test이름으로 생성, 여러개의 워크시트 만들 수 있음)
worksheet = workbook.add_worksheet('test')

#워크 시트 안에 숫자 값을 넣습니다.
# worksheet.write(행, 열, 값)
worksheet.write('A1', 1)
worksheet.write('B1', 2)
worksheet.write('C1', 3)
worksheet.write('D1', 4)
worksheet.write('E1', 5)
worksheet.write('A2', '=SUM(A1:E1)')
worksheet.write('B2', '=AVERAGE(A1:E1)')

workbook.close()

이력서 분석

# https://olefile.readthedocs.io/en/latest/Howto.html
# 우리 수업에서는 사용하지 않습니다.
!pip install olefile
Collecting olefile
  Downloading olefile-0.46.zip (112 kB)
     |████████████████████████████████| 112 kB 36.9 MB/s 
Building wheels for collected packages: olefile
  Building wheel for olefile (setup.py) ... done
  Created wheel for olefile: filename=olefile-0.46-py2.py3-none-any.whl size=35431 sha256=2ff2ed6a863189da0f3466dcbaa6822dc1394883808091af3bd58c58669bae25
  Stored in directory: /root/.cache/pip/wheels/84/53/e6/37d90ccb3ad1a3ca98d2b17107e9fda401a7c541ea1eb6a65a
Successfully built olefile
Installing collected packages: olefile
Successfully installed olefile-0.46
!pip install ole-py
Collecting ole-py
  Downloading ole_py-1.1.2-py3-none-any.whl (7.5 kB)
Installing collected packages: ole-py
Successfully installed ole-py-1.1.2
import ole
with ole.open('이력서_1.hwp') as f:
    print(f.list_streams())
    print('=' * 10)
    data = f.get_stream('PrvText').read().decode('utf-16le')
    print(data)
('FileHeader', 'DocInfo', '\x05HwpSummaryInformation', 'PrvImage', 'PrvText', 'Scripts/JScriptVersion', 'Scripts/DefaultJScript', 'DocOptions/_LinkDoc', 'BodyText/Section0')
==========
이  력  서
<인적사항><성          명><홍길동><생  년  월  일><1993년 8월 13일><현    주    소><제주특별자치도 제주시><연    락    처><010-2233-1478><이    메    일><ab8ab@naver.com>

<학력사항><학교명><전공><성적><졸업구분><소재지><건국대학교><컴퓨터공학과><4.1/4.5><졸업><서울>

<자격면허><자격면허증명><시행기관><취득년월><TOEIC><점수><정보처리기사><한국산업인력공단><19.05.22><725점><한국사능력검정 1급><국사편찬위원회><19.08.23>

<교육 / 활동 / 수상><기간><활동 내용><병역사항><군필여부><군필><19.11 ~ 20.03><빅데이터 전략 마에스트로><군별><육군><><><계급><병장><><><복무기간><15.02~16.11>

<컴퓨터 언어   능력 (상/중/하)><R><Python><Javascript><SQL><HTML/CSS><상><중><중><하><하>

위의 내용은 사실과 틀림없음을 확인합니다.

2020년 5월 11일 성명 : 홍길동

text = 'lee!ho!jun'
text.split('!')
['lee!h', 'o!jun']
data.split('><')
['이  력  서\r\n<인적사항',
 '성          명',
 '홍길동',
 '생  년  월  일',
 '1993년 8월 13일',
 '현    주    소',
 '제주특별자치도 제주시',
 '연    락    처',
 '010-2233-1478',
 '이    메    일',
 'ab8ab@naver.com>\r\n\r\n<학력사항',
 '학교명',
 '전공',
 '성적',
 '졸업구분',
 '소재지',
 '건국대학교',
 '컴퓨터공학과',
 '4.1/4.5',
 '졸업',
 '서울>\r\n\r\n<자격면허',
 '자격면허증명',
 '시행기관',
 '취득년월',
 'TOEIC',
 '점수',
 '정보처리기사',
 '한국산업인력공단',
 '19.05.22',
 '725점',
 '한국사능력검정 1급',
 '국사편찬위원회',
 '19.08.23>\r\n\r\n<교육 / 활동 / 수상',
 '기간',
 '활동 내용',
 '병역사항',
 '군필여부',
 '군필',
 '19.11 ~ 20.03',
 '빅데이터 전략 마에스트로',
 '군별',
 '육군',
 '',
 '',
 '계급',
 '병장',
 '',
 '',
 '복무기간',
 '15.02~16.11>\r\n\r\n<컴퓨터 언어   능력 (상/중/하)',
 'R',
 'Python',
 'Javascript',
 'SQL',
 'HTML/CSS',
 '상',
 '중',
 '중',
 '하',
 '하>\r\n\r\n위의 내용은 사실과 틀림없음을 확인합니다.\r\n\r\n2020년 5월 11일 성명 : 홍길동\r\n']
splitdata = data.split('><')
splitdata
['이  력  서\r\n<인적사항',
 '성          명',
 '홍길동',
 '생  년  월  일',
 '1993년 8월 13일',
 '현    주    소',
 '제주특별자치도 제주시',
 '연    락    처',
 '010-2233-1478',
 '이    메    일',
 'ab8ab@naver.com>\r\n\r\n<학력사항',
 '학교명',
 '전공',
 '성적',
 '졸업구분',
 '소재지',
 '건국대학교',
 '컴퓨터공학과',
 '4.1/4.5',
 '졸업',
 '서울>\r\n\r\n<자격면허',
 '자격면허증명',
 '시행기관',
 '취득년월',
 'TOEIC',
 '점수',
 '정보처리기사',
 '한국산업인력공단',
 '19.05.22',
 '725점',
 '한국사능력검정 1급',
 '국사편찬위원회',
 '19.08.23>\r\n\r\n<교육 / 활동 / 수상',
 '기간',
 '활동 내용',
 '병역사항',
 '군필여부',
 '군필',
 '19.11 ~ 20.03',
 '빅데이터 전략 마에스트로',
 '군별',
 '육군',
 '',
 '',
 '계급',
 '병장',
 '',
 '',
 '복무기간',
 '15.02~16.11>\r\n\r\n<컴퓨터 언어   능력 (상/중/하)',
 'R',
 'Python',
 'Javascript',
 'SQL',
 'HTML/CSS',
 '상',
 '중',
 '중',
 '하',
 '하>\r\n\r\n위의 내용은 사실과 틀림없음을 확인합니다.\r\n\r\n2020년 5월 11일 성명 : 홍길동\r\n']
splitdata[2]
'홍길동'
splitdata[1]
'성          명'
splitdata.index('성          명')
1
splitdata
['이  력  서\r\n<인적사항',
 '성          명',
 '홍길동',
 '생  년  월  일',
 '1993년 8월 13일',
 '현    주    소',
 '제주특별자치도 제주시',
 '연    락    처',
 '010-2233-1478',
 '이    메    일',
 'ab8ab@naver.com>\r\n\r\n<학력사항',
 '학교명',
 '전공',
 '성적',
 '졸업구분',
 '소재지',
 '건국대학교',
 '컴퓨터공학과',
 '4.1/4.5',
 '졸업',
 '서울>\r\n\r\n<자격면허',
 '자격면허증명',
 '시행기관',
 '취득년월',
 'TOEIC',
 '점수',
 '정보처리기사',
 '한국산업인력공단',
 '19.05.22',
 '725점',
 '한국사능력검정 1급',
 '국사편찬위원회',
 '19.08.23>\r\n\r\n<교육 / 활동 / 수상',
 '기간',
 '활동 내용',
 '병역사항',
 '군필여부',
 '군필',
 '19.11 ~ 20.03',
 '빅데이터 전략 마에스트로',
 '군별',
 '육군',
 '',
 '',
 '계급',
 '병장',
 '',
 '',
 '복무기간',
 '15.02~16.11>\r\n\r\n<컴퓨터 언어   능력 (상/중/하)',
 'R',
 'Python',
 'Javascript',
 'SQL',
 'HTML/CSS',
 '상',
 '중',
 '중',
 '하',
 '하>\r\n\r\n위의 내용은 사실과 틀림없음을 확인합니다.\r\n\r\n2020년 5월 11일 성명 : 홍길동\r\n']
개인정보 = [
    '성          명',
    '생  년  월  일',
    '현    주    소',
    '연    락    처',
    '이    메    일'
]
결과 = []
for i in range(len(splitdata)):
    for j in range(len(개인정보)):
        if splitdata[i] == 개인정보[j]:
            결과.append(splitdata[i + 1])
결과
['홍길동',
 '1993년 8월 13일',
 '제주특별자치도 제주시',
 '010-2233-1478',
 'ab8ab@naver.com>\r\n\r\n<학력사항']
결과[-1] = 결과[-1].split('>')[0]
결과
['홍길동', '1993년 8월 13일', '제주특별자치도 제주시', '010-2233-1478', 'ab8ab@naver.com']
학력사항 = [
    '학교명',
    '전공',
    '성적',
    '졸업구분',
    '소재지'
]
학력사항결과 = []
for i in range(len(splitdata)):
    for j in range(len(학력사항)):
        if splitdata[i] == 학력사항[j]:
            학력사항결과.append(splitdata[i + 5])
학력사항결과
['건국대학교', '컴퓨터공학과', '4.1/4.5', '졸업', '서울>\r\n\r\n<자격면허']
학력사항결과[-1] = 학력사항결과[-1].split('>')[0]
학력사항결과
['건국대학교', '컴퓨터공학과', '4.1/4.5', '졸업', '서울']
index = 개인정보 + 학력사항
index
['성          명',
 '생  년  월  일',
 '현    주    소',
 '연    락    처',
 '이    메    일',
 '학교명',
 '전공',
 '성적',
 '졸업구분',
 '소재지']
result = 결과 + 학력사항결과
result
['홍길동',
 '1993년 8월 13일',
 '제주특별자치도 제주시',
 '010-2233-1478',
 'ab8ab@naver.com',
 '건국대학교',
 '컴퓨터공학과',
 '4.1/4.5',
 '졸업',
 '서울']
!pip install xlsxwriter
import xlsxwriter

#엑셀 파일 생성하기(test.xlsx로 생성)
workbook = xlsxwriter.Workbook('test.xlsx')

#파일 안에 워크 시트 생성하기
worksheet = workbook.add_worksheet('test')

# worksheet.write(2, 0, 1)
worksheet.write(0, 0, index[0])
worksheet.write(0, 1, index[1])
worksheet.write(0, 2, index[2])
worksheet.write(0, 3, index[3])

workbook.close()
import xlsxwriter

#엑셀 파일 생성하기(test.xlsx로 생성)
workbook = xlsxwriter.Workbook('test.xlsx')

#파일 안에 워크 시트 생성하기
worksheet = workbook.add_worksheet('test')

for i in range(10):
    worksheet.write(0, i, index[i].replace(' ', ''))

for j in range(10):
    worksheet.write(1, j, result[j])

workbook.close()
'he!!llo wor!!!ld'.replace('!', '@')
'he@@llo wor@@@ld'

glob

import glob

path = ('./*.hwp')
for filename in glob.glob(path):
    print(filename)
./이력서_51.hwp
./이력서_90.hwp
./이력서_12.hwp
./이력서_70.hwp
./이력서_13.hwp
./이력서_47.hwp
./이력서_48.hwp
./이력서_45.hwp
./이력서_5.hwp
./이력서_34.hwp
./이력서_40.hwp
./이력서_84.hwp
./이력서_18.hwp
./이력서_10.hwp
./이력서_71.hwp
./이력서_43.hwp
./이력서_42.hwp
./이력서_20.hwp
./이력서_73.hwp
./이력서_46.hwp
./이력서_11.hwp
./이력서_60.hwp
./이력서_23.hwp
./이력서_94.hwp
./이력서_37.hwp
./이력서_83.hwp
./이력서_92.hwp
./이력서_97.hwp
./이력서_36.hwp
./이력서_19.hwp
./이력서_39.hwp
./이력서_22.hwp
./이력서_85.hwp
./이력서_76.hwp
./이력서_32.hwp
./이력서_28.hwp
./이력서_44.hwp
./이력서_99.hwp
./이력서_68.hwp
./이력서_82.hwp
./이력서_53.hwp
./이력서_33.hwp
./이력서_31.hwp
./이력서_24.hwp
./이력서_26.hwp
./이력서_80.hwp
./이력서_67.hwp
./이력서_1.hwp
./이력서_16.hwp
./이력서_75.hwp
./이력서_17.hwp
./이력서_87.hwp
./이력서_30.hwp
./이력서_65.hwp
./이력서_54.hwp
./이력서_79.hwp
./이력서_49.hwp
./이력서_57.hwp
./이력서_61.hwp
./이력서_3.hwp
./이력서_58.hwp
./이력서_93.hwp
./이력서_27.hwp
./이력서_89.hwp
./이력서_52.hwp
./이력서_72.hwp
./이력서_25.hwp
./이력서_55.hwp
./이력서_50.hwp
./이력서_9.hwp
./이력서_64.hwp
./이력서_2.hwp
./이력서_98.hwp
./이력서_7.hwp
./이력서_81.hwp
./이력서_4.hwp
./이력서_95.hwp
./이력서_86.hwp
./이력서_14.hwp
./이력서_6.hwp
./이력서_8.hwp
./이력서_100.hwp
./이력서_15.hwp
./이력서_59.hwp
./이력서_62.hwp
./이력서_35.hwp
./이력서_88.hwp
./이력서_69.hwp
./이력서_21.hwp
./이력서_77.hwp
./이력서_74.hwp
./이력서_38.hwp
./이력서_96.hwp
./이력서_63.hwp
./이력서_66.hwp
./이력서_29.hwp
./이력서_56.hwp
./이력서_78.hwp
./이력서_41.hwp
./이력서_91.hwp
filelist = !ls
filelist
['sample_data']