티스토리 뷰

Study/Ect

[Python] Colab에서 word 문서 다루기

코딩하는 앤지 2023. 5. 2.
728x90
반응형

사무 보조 알바를 하다보니 반복되는 작업이 많아 자동화를 시도해보게 되었다.

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

add_run 예제

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이다.

 

728x90
반응형
댓글