티스토리 뷰
요즘 정보처리기사 시험 준비에 모의고사 기출문제를 워드에 정리 중에 있다.
하지만 이를 복사, 붙여넣기를 하면 해당 블로그나 카페의 출처가 지저분하게 함께 붙여넣어지곤 한다.
물론 저작권 정말정말 중요하지만 이건 절대로 혼자만 볼거라 지움. 오해ㄴㄴ
처음에는 붙여넣기 후 해당 문장을 삭제했는데 체념하고 그냥 붙여넣었다.
이제 한번에 삭제해보자.
파이썬에는 python-docx라는 모듈이 있다.
이 모듈로 워드 파일을 불러올 수 있고, 관리 가능하다.
아래는 공식 문서이다.
https://python-docx.readthedocs.io/en/latest/
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/47081812/python-docx-how-can-i-save-docx-to-the-specific-path
'Basic_Studies > Python' 카테고리의 다른 글
[Python] Django model form에 부트스트랩 테마 적용하기 (0) | 2020.11.07 |
---|---|
[Python] VSCode로 Django 시작하기(venv 포함) (0) | 2020.11.01 |
[Python] if __name__ == "__main__" : 이해하기 (0) | 2020.10.12 |
[Python] 리스트 관련 자주 쓰는 함수 (0) | 2020.09.27 |
[Python] 입출력 관련 함수(한번에 두 숫자 출력하기 등) (0) | 2020.09.19 |
- Total
- Today
- Yesterday
- 파이썬 정렬
- dvd 효과
- react router
- 리액트 컴포넌트
- 리액트 파라미터 넘기기
- next.js 리다이렉트
- 화이팅
- bs4 크롤링
- 백준 10989 파이썬
- 10989 파이썬
- 리액트 라우터
- 파이썬 크롤링
- nuxt 공식문서
- nextjs 파라미터 넘기기
- getserversideprops redirect
- 리액트 스크롤
- vscode venv
- 파이썬 flask
- NextJS
- 카페음료테스트
- css marquee
- 리액트
- Til
- 글래스모피즘 애니메이션 구현
- css 글래스모피즘
- nextjs 스크롤
- 자바스크립트
- 움직이는 글래스모피즘
- nuxt 공식문서 한글
- 글래스모피즘 구현
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |