A Python library for extracting text from different types of files (PDF, DOCX, PPTX, XLSX, ODT, ecc.).
Project description
PyxTxt
PyxTxt is a simple and powerful Python library to extract text from various file formats.
It supports PDF, DOCX, XLSX, PPTX, ODT, HTML, XML, TXT, legacy XLS files, and more.
✨ Features
- Extracts text from both file paths and in-memory buffers (
io.BytesIO). - Supports multiple formats: PDF, DOCX, PPTX, XLSX, ODT, HTML, XML, TXT, legacy Office files (.xls,.ppt).
- Automatically detects MIME type using
python-magic. - Compatible with modern and legacy formats.
- Can handle streamed content without saving to disk (with some limitations).
📦 Installation
The library i modular so you can install all modules:
pip install pyxtxt[all]
or just the modules you need:
pip install pyxtxt[pdf,odf,docx,presentation,spreadsheet,html]
Beause needed libraries are common installing the html module will enable also SVG and XML. The architecture is designed to be able to grow with new modules to work with other formats as well.
⚠️ Note: You must have libmagic installed on your system (required by python-magic).
The pyproject.toml file should select the correct version for your system. But if you have any problem you can install it manually.
On Ubuntu/Debian:
sudo apt install libmagic1
On Mac (Homebrew):
brew install libmagic
On Windows:
Use python-magic-bin instead of python-magic for easier installation.
🛠️ Dependencies
-
PyMuPDF (fitz)
-
beautifulsoup4
-
python-docx
-
python-pptx
-
odfpy
-
openpyxl
-
lxml
-
xlrd (<2.0.0)
-
python-magic
Dependencies are automatically installed from pyproject.toml.
📚 Usage Example
Extract text from a file path:
from pyxtxt import xtxt
text = xtxt("document.pdf")
print(text)
Extract text from a file-like buffer:
import io
with open("document.docx", "rb") as f:
buffer = io.BytesIO(f.read())
from pyxtxt import xtxt
text = xtxt(buffer)
print(text)
Show available formats: from pyxtxt import extxt_available_formats
from pyxtxt import extxt_available_formats
text = extxt_available_formats()
print(text)
# For a pretty printing
text = extxt_available_formats(True)
print(text)
⚠️ Known Limitations
When passing a raw stream (io.BytesIO) without a filename, legacy files (.doc, .xls, .ppt) may not be correctly detected.
This is a limitation of libmagic beacuse the signature byte sequence at the start of doc/xls/ppt is exactly the same (b'\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1'), not of pyxtxt.
If available, using the original filename is highly recommended.
To extract text from documents in MSWrite's old .doc format, it is necessary to install antiword.
sudo apt-get update
sudo apt-get -y install antiword
🔒 License
Distributed under the MIT License.
The software is provided "as is" without any warranty of any kind.
Pull requests, issues, and feedback are warmly welcome! 🚀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyxtxt-0.1.16.tar.gz.
File metadata
- Download URL: pyxtxt-0.1.16.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ed3e9bcb68c789801708c492821a10a784ebd75b60032d79fa8b32f8079e170
|
|
| MD5 |
c9147964101d8c0e5b553f7618d0eb00
|
|
| BLAKE2b-256 |
de46626959d935d9e50ba1115501a1650f5194519608f02d424ed90222ff9df2
|
File details
Details for the file pyxtxt-0.1.16-py3-none-any.whl.
File metadata
- Download URL: pyxtxt-0.1.16-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a702c0c8c30804a96e71bf32c2f0d0545b9201c02f29b8f28df21f5c997d5646
|
|
| MD5 |
7d15964eef53a1a6f0971027aeb83b1f
|
|
| BLAKE2b-256 |
3f54de492457e5712e07a7dd2539e00799fc6e6c9203fb940107a3cc1b9aefe2
|