Lightweight package for reading and writing FASTA files.
Project description
protfasta
Release 0.1.19 (July 2026)
Overview
protfasta - a robust parser for protein-based FASTA files.
Documentation
For all documentation see https://protfasta.readthedocs.io/en/latest/.
For code see https://github.com/holehouse-lab/protfasta.
Installation
protfasta has been tested on Linux and macOS. It should also work on Windows but we haven't tested it there yet.
protfasta can be downloaded and installed directly from PyPI using pip:
pip install protfasta
If this has worked, the pfasta command-line tool should be available from the command-line
pfasta --help
And you're done. This also means you can now import and use protfasta in your Python workflow.
Simple example
import protfasta
# sequences is now a dictionary where keys are FASTA headers and values are sequences.
sequences = protfasta.read_fasta('inputfile.fasta')
Errors and help
For bug reports or errors please raise an issue on this github repository (see the Issues tab at the top).
Changelog
-
0.1.19 (July 2026) - Streaming reads with full sanitization.
- New
protfasta.read_fasta_stream(...)- a streaming counterpart toread_fastawith an identical signature. It returns a generator that yields(header, sequence)tuples (or[header, sequence]lists withreturn_list=True) one record at a time, applying the same sanitization pipeline asread_fasta(duplicate handling, invalid-residue handling, alignment support, custom header parsing). Peak memory stays bounded to roughly one record, so files larger than RAM can be processed in a single pass. Sanitized output can be teed to disk as it streams viaoutput_filename. - Breaking change: removed the public
protfasta.iter_fastagenerator that was introduced in 0.1.18.read_fasta_streamsupersedes it - it provides the same streaming access plus the full sanitization pipeline. For the closest drop-in equivalent (streaming with no checks), useread_fasta_stream(f, expect_unique_header=False, duplicate_record_action='ignore', invalid_sequence_action='ignore'); or justread_fasta_stream(f)to additionally gain header-uniqueness, duplicate, and invalid-residue validation. - Added a dedicated
read_fasta_streamdocumentation page and worked examples, including guidance on when to useread_fasta_streamvsread_fasta. - Test suite expanded to 260 tests (21 new tests covering the streaming parser).
- New
-
0.1.18 (April 2026) - Performance overhaul for large FASTA files (hundreds of millions of sequences).
read_fastanow streams the input file instead of reading it entirely into memory withreadlines()— peak memory is now O(single record) rather than O(file size).- New
protfasta.iter_fasta(filename, header_parser=None)generator for memory-bounded streaming access to(header, sequence)pairs from files that don't fit in RAM. - Core parser rewritten to use list-of-parts +
''.join()instead of quadratic string concatenation, and to skip header-uniqueness tracking entirely whenexpect_unique_header=False. convert_to_valid/ invalid-residue handling now uses a pre-builtstr.translatetable (single C-level pass) instead of a chainedstr.replaceloop — typically 5–20× faster.check_sequence_is_validnow uses frozenset membership instead of list-basedinscans.- Duplicate-detection utilities (
fail_on_duplicates,remove_duplicates,fail_on_duplicate_sequences,remove_duplicate_sequences) now store 16-byte blake2b digests instead of full sequences in their lookup structures, dramatically reducing peak memory for files with long sequences. write_fastareplaced its per-residuefh.write()loop with chunked slice writes and opens the output with a 1 MiB buffer — roughly two orders of magnitude faster on large files.- All existing behavior and the full test suite (239 tests) are preserved.
-
0.1.16 - 0.1.17 - skipped...
-
0.1.14 and 0.1.15 (October 2024) - Re-wrote build chain and versioning to use
pyproject.tomland versioningit. protfasta should now support Python beyond 3.12. About bloody time.- Added
--versionflag to pfasta - Messed around a bit with tags to ensure we had a tagged version compatible with them.
- Added
-
0.1.13 (January 2023) - Added upper limit of Python 3.11 to accomodate clash between versioneer and Python 3.12. Ultimately we'll move to versioningit for release versioning (as we have done internally) but need to make sure we have a robust protocol for this switch and then do this for ALL tools....
-
0.1.12 (March 2023) - integrated in check_header_parser flag via pull request from the amazing Friedlab !
-
Added in
append_to_fastaflag so you can append to an existing FASTA file (thanks Ryan!) -
0.1.11 (Sept 17th 2022) - re-wrote code for checking duplicate sequence to make it O(1) instead of O(n) for number of sequences (:-/) and added convert-remove option for invalid_sequences
-
0.1.9 (Sept 12th 2021) - added in robustness for whitespace in sequence files, which, bizarrely, was not present (i.e. added as an invalid residue type but can now be converted).
Copyright
Copyright (c) 2020-2026, Alex Holehouse - Holehouse lab. protfasta is released under the MIT license. The codebase is well structured and relatively simple, lending it to feature addition. We welcome pull-requests assuming contributed code maintains an appropriate level of clarity and robustness.
Acknowledgements
Many of the software-engineering tools and approaches used in the development of protfasta come from resources developed by the Molecular Sciences Software Institute.
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 protfasta-0.1.19.tar.gz.
File metadata
- Download URL: protfasta-0.1.19.tar.gz
- Upload date:
- Size: 129.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2e8e2a22d766073217277628348b49e207ddf2bb3d922ca62d7fa1607c58452
|
|
| MD5 |
e582031a224cb52e515f7dbe5134f2ee
|
|
| BLAKE2b-256 |
9e4fe13404d1a6cc0591c5bb664e4faa07cb6bb5eb10aea72e4cbe4b3914a0d8
|
File details
Details for the file protfasta-0.1.19-py3-none-any.whl.
File metadata
- Download URL: protfasta-0.1.19-py3-none-any.whl
- Upload date:
- Size: 137.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e769a44e78a044733280f7ac56afea411ff29ace937dc4d4926da4dd419cfbf4
|
|
| MD5 |
169cd8d39f7146cebf69dd63654799dc
|
|
| BLAKE2b-256 |
8ebaeaade0e053a108b5cbbb1c4a2ffae673847f7f266a2ebe76d784685d4643
|