티스토리 뷰
사무 보조 알바를 하다보니 반복되는 작업이 많아 자동화를 시도해보게 되었다.
word 문서는 python-docx 패키지를 통해 쉽게 다룰 수 있다.
간단하게 문서 내 글을 읽고, 쓰는 방법을 정리해 보았다.
1. python-docx 설치
word 문서를 다루기 위해 python-docx 패키지를 설치한다.
이 패키지는 Colab에서도 잘 돌아간다.
pip install python-docx
2. word 문서 불러오기
from docx import Document
path = "/content/file_name.docx"
doc = Document(path)
3. Paragraphs
3.1. 문단 읽기
paragraphs 함수를 통해 word 문서 내 모든 문단을 확인할 수 있다.
하지만 표는 확인이 불가능하다.
from docx import Document
# 문서 불러오기
path = "/content/file_name.docx"
doc = Document(path)
# 문서 내 문단을 읽기
# 1) 리스트로 담기
paragraphs = [paragraph.text for paragraph in doc.paragraphs]
# 2) 문단별로 print해서 보기
for i, paragraph in enumerate(doc.paragraphs):
print(i+1, "문단:", paragraph.text)
3.2. 문단 쓰기
1) add_heading 함수를 통해 제목을 넣을 수 있다. (heading도 하나의 문단이다.)
2) add_paragraph 함수를 통해 word에 문단을 추가할 수 있다.
3) 문단을 이어쓰고 싶다면 add_run 함수를 사용하면 된다.
from docx import Document
# 빈 문서 생성
doc = Document()
# heading은 level을 통해 조절할 수 있다.
doc.add_heading("글 제목", level = 0)
doc.add_heading("소제목", level = 1)
# 문단 쓰기
doc.add_paragraph("문단 내용 입력1")
# 문단 내용 이어 쓰기
# 문단을 생성하면서 지정하기
paragraph = doc.add_paragraph("문단 내용 입력2")
paragraph.add_run(" 이어서 문단을 작성하려면 add_run 함수 사용") # 띄어쓰기 주의
# 이미 작성된 문단을 지정하기
paragraph = doc.paragraphs[3]
paragraph.add_run("\n다른 방법으로 문단 내용 입력2에 이어서 작성")
# 특정 문단 앞에 새로운 문단 추가하기
doc.paragraphs[2].insert_paragraph_before("문단 내용 입력3")
# 문서 저장
doc.save("sample.docx")
4) add_run을 사용할 때는 bold, italic, underline을 추가할 수 있다.
# Bold
paragraph.add_run('굵은 글자').bold = True
# Italic
paragraph.add_run('기울임 글자').italic = True
# Underline
paragraph.add_run('밑줄 글자').underline = True
4. Table
4.1. 표 읽기
표는 문단과 별도로 관리된다.
이중 리스트와 유사하게 표(tables)는 행(rows)으로 구성되어 있고, 행은 셀(cells)로 구성되어 있다.
그리고 셀 안에 paragraphs가 들어있는 구조를 갖고 있다.
one | two | three | four |
사과 | 바나나 | 딸기 | 포도 |
위와 같은 표가 있을 때, "딸기"가 들어있는 위치는 첫 번째 tables 안에 두 번째 rows, 세 번째 cells에서 찾을 수 있다.
이 때, 인덱스는 0부터 시작한다.
# "딸기"가 들어있는 셀
pos = doc.tables[0].rows[1].cells[2]
# 셀 안의 내용은 paragraphs의 text로 확인 가능하다.
pos.paragraphs[0].text
[ 셀이 합쳐진 경우 ]
이름 | Angie | ||
연락처 | 010-0000-0000 | 이메일 | sample@sample.com |
합쳐진 셀의 경우는 내용이 중복되어 cells 안에 담긴다.
즉, 첫 번째 rows 안에 Angie가 3번 연속으로 저장되어 있다.
4.2. 표 쓰기
표를 먼저 생성하고, 이후에 데이터를 담는 방법으로 표를 작성한다.
from docx import Document
# 빈 문서 생성
doc = Document()
# 2행 4열의 표 만들기
table = doc.add_table(rows = 2, cols = 4)
# 행 지정하기
a = table.rows[0].cells
# 각 셀에 값 입력하기
a[0].text = '이름'
a[1].text = 'Angie'
# 두 번째 행에 값 입력
b = table.rows[1].cells
b[0].text = '연락처'
b[1].text = '010-0000-0000'
b[2].text = '이메일'
b[3].text = 'sample@sample.com'
# 이름 작성 셀 합치기 (합칠 위치 중 왼쪽 위 셀에 오른쪽 아래 셀 merge하기)
a[1].merge(a[3])
# 기본 스타일 적용하기
table.style = doc.styles['Table Grid']
# 문서 저장
doc.save("sample.docx")
표의 style을 지정하지 않으면 아무런 선이 나타나지 않는다.
기본적인 style은 Table Grid이다.
'Study > Ect' 카테고리의 다른 글
[Python] 압축 폴더 해제하는 방법 (zip 압축 풀기) (0) | 2023.06.09 |
---|---|
[Python] Colab에서 아래한글(hwp) 문서 엑셀/csv 파일로 저장하기 (0) | 2023.05.05 |
[Python] Colab에서 아래한글(hwp) 문서 읽기 (2) | 2023.05.02 |
[Python] numpy 없이 전치행렬 구현하기(map,zip) (0) | 2023.03.26 |
[Python] List Comprehension (0) | 2023.03.26 |