3 Cách hợp nhất các tài liệu Word bằng Python đơn giản nhất

0 0 0

Người đăng: Vũ Tuấn

Theo Viblo Asia

Bạn đang có nhiều văn bản word muốn hợp nhất mà không phải mất công vào từng văn bản để copy - paste, rất mất thời gian và dễ gây lỗi font, bố cục.

Bài viết này sẽ hướng dẫn các bạn thực hiện việc hợp nhất nhiều văn bản word chỉ bằng Python, vừa đơn giản, lại tiết kiệm thời gian và công sức.

Tôi sẽ sử dụng 3 phương pháp hiệu quả để hợp nhất các văn bản word thành một, bao gồm: docxcompose, pypandoc và python-docx. Mỗi phương pháp đều có những điểm mạnh riêng và phù hợp với các trường hợp sử dụng khác nhau.

1. Cách hợp nhất tài liệu với docxcompose

docxcompose là một thư viện Python chuyên dụng được thiết kế riêng để hợp nhất các tài liệu Word trong khi vẫn giữ nguyên định dạng phức tạp và các thành phần cấu trúc của chúng.

Không giống như các thư viện mục đích chung, docxcompose tập trung vào việc duy trì tính toàn vẹn của tài liệu trong quá trình hợp nhất. Điều này làm cho nó trở thành lựa chọn phù hợp cho các tác vụ mà việc bảo toàn tiêu đề, chân trang và kiểu tùy chỉnh là điều cần thiết.

Các tính năng chính:

  • Giữ nguyên định dạng phức tạp – Đảm bảo rằng tiêu đề, chân trang và kiểu từ mỗi tài liệu được giữ nguyên trong đầu ra được hợp nhất cuối cùng.
  • Ghép tuần tự – Cho phép thêm nhiều tài liệu theo thứ tự chỉ định, phù hợp với việc lắp ráp tài liệu có cấu trúc.
  • Tích hợp dễ dàng – Được thiết kế để hoạt động liền mạch với thư viện python-docx, giúp dễ dàng kết hợp vào quy trình làm việc hiện có.
  • Thời gian xử lý – docxcompose được tối ưu hóa để hợp nhất các tài liệu lớn trong khi vẫn giữ nguyên định dạng và kiểu phức tạp. Nó xử lý các tài liệu theo trình tự, điều này có thể dẫn đến hiệu suất chậm hơn đối với các tài liệu rất lớn.
  • Sử dụng bộ nhớ – docxcompose yêu cầu sử dụng bộ nhớ ở mức vừa phải vì cần lưu trữ tài liệu đã hợp nhất trong bộ nhớ trước khi lưu vào đĩa.

Trường hợp sử dụng docxcompose

  • Bạn cần kết hợp các tệp DOCX trong khi vẫn giữ nguyên định dạng chi tiết và các thành phần bố cục.
  • Bạn đang xử lý các tài liệu có nhiều kiểu, tiêu đề, chân trang hoặc các tính năng định dạng nâng cao khác.
  • Mục tiêu chính của bạn là hợp nhất các tài liệu mà không làm mất bất kỳ định dạng hoặc cấu trúc ban đầu nào.

Cách cài đặt docxcompose

Để sử dụng docxcompose, hãy cài đặt thư viện bằng lệnh sau:

pip install docxcompose

Ví dụ: Sau đây là một tập lệnh Python được sử dụng docxcompose để hợp nhất nhiều tệp DOCX:

from docxcompose.composer import Composer
from docx import Document def merge_docs(output_path, *input_paths): base_doc = Document(input_paths[0]) composer = Composer(base_doc) for file_path in input_paths[1:]: doc = Document(file_path) composer.append(doc) composer.save(output_path) print(f"Documents merged successfully into {output_path}") if __name__ == "__main__": output_file = "merged_document.docx" input_files = ["doc1.docx", "doc2.docx", "doc3.docx"] merge_docs(output_file, *input_files)

Trong đoạn mã này:

  • Composer– Quản lý quá trình hợp nhất bằng cách lấy một tài liệu ban đầu và thêm các tài liệu bổ sung trong khi vẫn giữ nguyên định dạng của chúng.
  • append– Thêm nội dung của mỗi tài liệu tiếp theo vào tài liệu cơ sở, giữ nguyên bố cục và kiểu dáng ban đầu.
  • save– Hoàn thiện và lưu tài liệu đã hợp nhất vào đường dẫn đầu ra đã chỉ định.

Làm thế nào để thêm ngắt trang với docxcompose?

Ngắt trang giúp duy trì sự tách biệt rõ ràng giữa các phần, tăng cường tính tổ chức và khả năng đọc của tài liệu.

Với docxcompose, bạn có thể đảm bảo rằng mỗi tài liệu được thêm vào sẽ bắt đầu ở một trang mới, giúp cải thiện cấu trúc và khả năng điều hướng của tài liệu cuối cùng.

from docxcompose.composer import Composer
from docx import Document def merge_docs_with_page_breaks(output_path, *input_paths): base_doc = Document(input_paths[0]) composer = Composer(base_doc) for file_path in input_paths[1:]: doc = Document(file_path) # adding page break before merging each document base_doc.add_page_break() composer.append(doc) composer.save(output_path) print(f"Documents merged successfully into {output_path}") if __name__ == "__main__": output_file = "merged_document_with_page_breaks.docx" input_files = ["doc1.docx", "doc2.docx", "doc3.docx"] merge_docs_with_page_breaks(output_file, *input_files)

2. Cách hợp nhất tài liệu với pypandoc

pypandoc là một công cụ mạnh mẽ tận dụng Pandoc để chuyển đổi và hợp nhất các tài liệu ở nhiều định dạng khác nhau.

Pandoc được biết đến với tính linh hoạt trong việc xử lý chuyển đổi tài liệu và pypandocmở rộng khả năng này sang Python, cho phép tích hợp tài liệu từ nhiều nguồn và định dạng khác nhau.

Các tính năng chính:

  • Chuyển đổi đa định dạng – Hỗ trợ chuyển đổi giữa nhiều định dạng khác nhau như DOCX, Markdown, HTML, v.v.
  • Đầu ra hợp nhất – Cho phép bạn kết hợp nội dung từ nhiều định dạng khác nhau thành một tệp DOCX duy nhất, hữu ích khi tích hợp các tài liệu được tạo bằng nhiều công cụ khác nhau.
  • Ghép dựa trên văn bản – Chuyển đổi tài liệu sang dạng văn bản thuần túy để ghép và sau đó chuyển lại thành DOCX, giúp đơn giản hóa quá trình tích hợp.
  • Thời gian xử lý – pypandoc thường nhanh hơn so với docxcompose về việc hợp nhất tài liệu, vì nó sử dụng khả năng chuyển đổi của Pandoc để đơn giản hóa quá trình hợp nhất. Nhưng có thể sẽ chậm hơn đối với các tài liệu rất lớn hoặc có định dạng phức tạp.
  • Sử dụng bộ nhớ – pypandoc sử dụng ít bộ nhớ hơn so với docxcompose, vì nó chuyển đổi tài liệu thành văn bản thuần túy trước khi hợp nhất, giúp giảm dung lượng bộ nhớ.

Trường hợp sử dụng pypandoc:

  • Bạn cần phải hợp nhất các tài liệu có định dạng khác nhau (ví dụ: DOCX, Markdown, HTML) thành một tệp Word duy nhất.
  • Bạn đang làm việc với nội dung từ nhiều nguồn khác nhau và cần tạo ra một kết quả thống nhất.
  • Bạn cần một giải pháp linh hoạt để tích hợp tài liệu, xử lý được việc chuyển đổi định dạng.

Cách cài đặt pypandoc:

Cài đặt pypandocbằng lệnh sau:

pip install pypandoc

Ví dụ:

Sau đây là một tập lệnh Python được sử dụng pypandoc để hợp nhất các tài liệu từ nhiều định dạng khác nhau thành một tệp DOCX duy nhất:

import pypandoc
import os def merge_docs(output_path, *input_paths): all_text = "" for file_path in input_paths: if not os.path.isfile(file_path): print(f"File not found: {file_path}") continue text = pypandoc.convert_file(file_path, 'plain') all_text += text + "\n\n" doc = pypandoc.convert_text(all_text, 'docx', format='md') with open(output_path, 'wb') as f: f.write(doc) print(f"Documents merged successfully into {output_path}") if __name__ == "__main__": output_file = "merged_document.docx" input_files = ["doc1.md", "doc2.html", "doc3.docx"] merge_docs(output_file, *input_files)

Trong đoạn mã này:

  • convert_file– Chuyển đổi từng tài liệu thành văn bản thuần túy, giúp đơn giản hóa quá trình hợp nhất bằng cách loại bỏ định dạng.
  • convert_text– Chuyển đổi văn bản thuần túy đã kết hợp trở lại định dạng DOCX, cho phép tạo ra một tài liệu cuối cùng thống nhất.

Lưu ý: Mặc dù pypandoc có hiệu quả trong việc chuyển đổi và hợp nhất tài liệu, hãy lưu ý rằng định dạng có thể bị mất trong quá trình này. Phương pháp hợp nhất dựa trên văn bản có thể không giữ nguyên tất cả các kiểu gốc, tiêu đề hoặc các chi tiết định dạng khác từ tài liệu nguồn.

3. Cách hợp nhất tài liệu với python-docx

python-docx là một thư viện được sử dụng rộng rãi để tạo, đọc và thao tác các tệp DOCX . Mặc dù không chuyên về việc hợp nhất, nhưng bạn vẫn có thể sử dụng nó một cách hiệu quả cho các tác vụ hợp nhất cơ bản. Thư viện này phù hợp để thao tác và hợp nhất tài liệu đơn giản mà không cần bảo toàn định dạng phức tạp.

Các tính năng chính:

  • Xử lý tài liệu cơ bản – Cho phép bạn tạo, đọc và chỉnh sửa các tệp DOCX.
  • Gộp đơn giản – Có thể sử dụng cho các tác vụ ghép cơ bản khi định dạng nâng cao không phải là mối quan tâm chính.
  • Dễ sử dụng – Cung cấp API đơn giản để thao tác tài liệu, giúp đáp ứng các nhu cầu cơ bản.
  • Thời gian xử lý – Đây là phương pháp nhanh nhất để hợp nhất tài liệu vì nó sử dụng cách tiếp cận đơn giản, trực tiếp để hợp nhất tài liệu. Nhưng nó có thể không bảo toàn được định dạng và kiểu phức tạp.
  • Sử dụng bộ nhớ – Phương pháp này sử dụng ít bộ nhớ nhất trong ba phương pháp vì nó chỉ lưu trữ tạm thời tài liệu đã hợp nhất trong bộ nhớ trước khi lưu vào đĩa.

Trường hợp sử dụng python-docx:

  • Bạn cần một giải pháp đơn giản để ghép các tệp DOCX mà không cần định dạng phức tạp.
  • Các tài liệu bạn đang hợp nhất không bao gồm các thành phần nâng cao như tiêu đề, chân trang hoặc kiểu tùy chỉnh.
  • Bạn đang tìm kiếm một phương pháp đơn giản để kết hợp các tệp DOCX với thiết lập tối thiểu.

Cách cài đặ tpython-docx:

Để sử dụng python-docx, hãy cài đặt thư viện bằng:

pip install python-docx

Ví dụ:

Sau đây là một tập lệnh Python được sử dụng python-docx để hợp nhất các tệp DOCX:

from docx import Document
import os def merge_docs(output_path, *input_paths): merged_doc = Document() for file_path in input_paths: if not os.path.isfile(file_path): print(f"File not found: {file_path}") continue doc = Document(file_path) for element in doc.element.body: merged_doc.element.body.append(element) merged_doc.save(output_path) print(f"Documents merged successfully into {output_path}") if __name__ == "__main__": output_file = "merged_document.docx" input_files = ["doc1.docx", "doc2.docx", "doc3.docx"] merge_docs(output_file, *input_files)

Trong đoạn mã này:

  • Document– Biểu diễn một tài liệu Word trong Python.
  • element.body.append– Thêm nội dung của từng tài liệu vào tài liệu đã hợp nhất.
  • save– Lưu tài liệu đã hợp nhất cuối cùng vào đường dẫn đã chỉ định.

Kết luận

Mỗi phương pháp để hợp nhất tài liệu Word trong Python đều có những lợi thế riêng tùy thuộc vào nhu cầu cụ thể của bạn:

  • docxcompose duy trì định dạng và kiểu phức tạp, nhưng có thể chậm hơn đối với các tài liệu lớn và yêu cầu sử dụng bộ nhớ ở mức vừa phải.
  • pypandoc vô cùng lý tưởng để kết hợp các tài liệu có định dạng khác nhau, nhưng có thể mất một số định dạng và sử dụng ít bộ nhớ hơn.
  • python-docx phù hợp cho các tác vụ hợp nhất đơn giản với nhu cầu định dạng cơ bản và là phương pháp nhanh nhất với mức sử dụng bộ nhớ ít nhất.

Khi chọn phương pháp nào đi chăng nữa, bạn hãy cân nhắc không chỉ độ phức tạp của tài liệu mà còn cả yêu cầu về hiệu suất và bộ nhớ của ứng dụng.

Nếu bạn cần hợp nhất các tài liệu lớn có định dạng phức tạp, docxcompose có thể là lựa chọn tốt nhất, nhưng hãy chuẩn bị cho thời gian xử lý chậm hơn.

Nếu bạn cần tích hợp nội dung từ nhiều nguồn khác nhau, pypandoc sẽ là một lựa chọn tốt, nhưng hãy lưu ý đến khả năng bị mất định dạng.

Đối với các tác vụ hợp nhất đơn giản, python-docx là giải pháp nhanh chóng và gọn nhẹ.

Bằng cách xem xét điểm mạnh và điểm yếu của từng phương pháp, bao gồm các cân nhắc về hiệu suất và bộ nhớ, bạn có thể đưa ra quyết định sáng suốt và chọn phương pháp tiếp cận tốt nhất cho trường hợp sử dụng cụ thể của mình. Điều này sẽ đảm bảo bạn trải nghiệm quy trình hợp nhất tài liệu hiệu quả và hiệu suất. Cảm ơn các bạn đã theo dõi.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

0 0 56

- vừa được xem lúc

Tập tành crawl dữ liệu với Scrapy Framework

Lời mở đầu. Chào mọi người, mấy hôm nay mình có tìm hiểu được 1 chút về Scrapy nên muốn viết vài dòng để xem mình đã học được những gì và làm 1 demo nho nhỏ.

0 0 160

- vừa được xem lúc

Sử dụng Misoca API (oauth2) với Python

Với bài viết này giúp chúng ta có thể nắm được. ・Tìm hiểu cách xử lý API misoca bằng Python.

0 0 43

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 3)

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

0 0 57

- vừa được xem lúc

Lập trình socket bằng Python

Socket là gì. Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó tiến hành kết nối giữa client và server.

0 0 74

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 2)

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 89