스터디자료/Python 스터디

[Python] Word문서에서 Excel로 데이터 추출하기

바위맨 2021. 3. 26. 14:17
반응형

Why?

Word로 작성된 문서가 애초 설계된 내용을 모두 포함하고 있는지 검토를 해야할 경우가 있다. 
제목만 비교를 한다면 간다하게 비교가 가능하지만 본문의 내용을 검토해야한다면???

[KOREA-PYTHON-1]내용
설명
[KOREA-PYTHON-3]내용
설명
[KOREA-PYTHON-4]내용
설명
[KOREA-PYTHON-5]내용
설명
[KOREA-PYTHON-6]내용
설명
.....

위와같은 형식으로 문서가 작성되어 있다면 눈으로 하나씩 비교해보는 수밖에 없다. 

게다가 내용의 순서도 뒤죽박죽이라면... ? 하나하나 검색하면서 확인해야한다. 

그래서..

AutoHotkey를 사용해서 검색, 복사, 붙여넣기 식으로 데이터를 정리하려고 했지만, 문서 전체를 입력받아서 파싱하지 않는한 정확하게 분석이 되지 않았다. 

Python을 이용하면 Word문서를 입력받아서 Excel 문서의 생성까지 간단하게..(?!)할 수 있다. 

과연 간단할 지는..?

HOW

Python의 라이브러리를 사용해서 parsing을 진행한다. 
아래 코드가 핵심 코드. 그대로 분석은 안될 것이고 자기에 맞게 적당히 수정해서 사용해야 한다. 

import openpyxl
from pyautomate.office import Word

doc = Word('input.docx')
position = [  0  ,    0   ,  0 , ]
#         start     End    contents end
  
pos[0] = word.extract_text().find('반복되는 문자열', pos[2])
if pos[0] == -1:
      return pos
pos[1] = word.extract_text().find(']', pos[0])

excel['A'+str(ex_offset)] = word.extract_text()[pos[0]+1:pos[1]]
print(word.extract_text()[pos[0]:pos[1] + 1])

pos[2] = word.extract_text().find('\n', pos[1])
pos[2] = word.extract_text().find('\n', pos[2] + 1)
excel['B' + str(ex_offset)] = word.extract_text()[pos[1] + 1:pos[2]]
print(word.extract_text()[pos[1] + 1:pos[2]])
wb.save('out.xlsx')

Word문서를 입력 받아서  Excel문서로 붙여넣는 코드다. 

위의 코드를 실행하면 첫 번째 제목을 검색하고, 그 내용의 위치를 찾아서 Excel문서에 열 별로 분리해서 저장한다. 

 return이 들어간 부분이 있어서 마지막 제목까지 검색한 후에 종료할 수 있도록 반복문으로 코드를 작성하면 된다. 

반응형

'스터디자료 > Python 스터디' 카테고리의 다른 글

ch2 - 리스트 데이터 (head first python - 개정판)  (0) 2018.09.29
ch1 - 기초  (0) 2018.09.15
python study 시작과 최종 계획  (0) 2017.12.29