티스토리 뷰


요즘 정보처리기사 시험 준비에 모의고사 기출문제를 워드에 정리 중에 있다.

하지만 이를 복사, 붙여넣기를 하면 해당 블로그나 카페의 출처가 지저분하게 함께 붙여넣어지곤 한다.

물론 저작권 정말정말 중요하지만 이건 절대로 혼자만 볼거라 지움. 오해ㄴㄴ

 

이런 느낌이다. 저작권 문제가 있다면 삭제하겠습니다.

 

처음에는 붙여넣기 후 해당 문장을 삭제했는데 체념하고 그냥 붙여넣었다.

이제 한번에 삭제해보자.

 


 

파이썬에는 python-docx라는 모듈이 있다. 

이 모듈로 워드 파일을 불러올 수 있고, 관리 가능하다.

아래는 공식 문서이다.

https://python-docx.readthedocs.io/en/latest/

 

python-docx — python-docx 0.8.11 documentation

from docx import Document from docx.shared import Inches document = Document() document.add_heading('Document Title', 0) p = document.add_paragraph('A plain paragraph having some ') p.add_run('bold').bold = True p.add_run(' and some ') p.add_run('italic.')

python-docx.readthedocs.io

 

1. 모듈 설치

# 이거 했더니 오류났음. 아마 환경변수 설정을 잘못했을듯
pip install python-docx

# 이걸로 설치함
py -m pip install python-docx

이거 하고 근데 적용이 안되길래 vscode 창을 닫았다 열었다.

 

2. 모듈, 작업하고싶은 docx 파일 불러오기

from docx import Document

# 여기서 파일 경로는 단순하게 작업하는 폴더 내부에 같은 선 상에 넣어주었다.
document = Document('./word-prac.docx')

 

3. 삭제하고 싶은 문단 파싱해보기

삭제하고픈 문단 내부에 제일 특정할 것 같은 단어인 '수제비쌤'을 파싱해보도록 하자.

문단을 하나하나 살펴보면서 '수제비쌤'이 있다면 그 문장을 한번 출력해보는 것 이다.

 

for line in document.paragraphs:
# line.text는 line이 오브젝트로 불러와져서 실제 문장으로 보여지지 않기에 사용한다.
    if '수제비쌤' in line.text:
        print(line.text)

오옹 나이스~

 

4. 원하는 부분을 리스트로 만들어주기.

 

무슨 말 이냐면, 문단마다 if in구문으로 원하는 문단과 그렇지 않은 문단을 서치했었다.

이를 이용해 타겟 문단을 리스트에 넣고, 이를 문단 띄어쓰기 한 결과를 파일로 저장하겠다는 의미이다.

 

# 이 빈 리스트에 넣을 것
text_arr = []

for line in document.paragraphs:
    if '수제비쌤' not in line.text:
        text_arr.append(line.text)
        
# 확인용
print('\n'.join(text_arr))

오잉 왜 나오지?

수제비쌤만 계시지 않고 보안쌤도 계셨다.

'[출처] 작성자' 도 있어서

키워드를 '[출처]'로 바꾸어보겠다.

 

편안해진 나

 

5. 리스트에 담은 문장들을 새 docx 파일로 만들기

 

새 파일로 만들 빈 파일을 먼저 정의한다.

 

# 아까 처음에 불러온 document 아래에 할당하면 된다.
new_doc = Document()

 

이제 new_doc에 text_arr에 넣은 문장들을 하나씩 문단으로 넣어 줄 것이다.

for문을 돌리자.

 

for i in range(len(text_arr)):
    new_doc.add_paragraph(text_arr[i])

 

마지막으로 제일 중요한 파일 저장.

우선 가독성을 위해 원하는 파일 이름을 변수로 만들어주고, 

원하는 저장 경로를 save함수 내부에 적는다.

 

file_path = 'demo.docx'
# 내컴퓨터 내 다운로드 파일 안에 저장시킨다.
# 루트에 역슬래시 두개 적는거 주의
new_doc.save('C:\\Users\\gyurilee\\Downloads\\' + file_path)

 

실행시키고 확인해보자.

 

출처가 싹 지워진 채 아주 잘 저장됐다!


최종코드

from docx import Document

document = Document('./word-prac.docx')
new_doc = Document()
text_arr = []
for line in document.paragraphs:
    if '[출처]' not in line.text:
        text_arr.append(line.text)

for i in range(len(text_arr)):
    new_doc.add_paragraph(text_arr[i])

file_path = 'demo.docx'
new_doc.save('C:\\Users\\gyurilee\\Downloads\\' + file_path)

결론

이렇게 코드 몇 줄로 단순 반복 작업 없이, 원하는 부분을 삭제할 수 있는 방법을 알아보았다.

순수하게 필요로 개발을 사용해본건 이번이 처음인듯;;

 


참고:

https://python-docx.readthedocs.io/en/latest/user/documents.html

https://stackoverflow.com/questions/24104908/how-to-create-docx-files-with-python

https://stackoverflow.com/questions/25228106/how-to-extract-text-from-an-existing-docx-file-using-python-docx

https://stackoverflow.com/questions/47081812/python-docx-how-can-i-save-docx-to-the-specific-path

반응형
댓글