Package: miniFasta
A simple FASTA read and write toolbox for small to medium size projects.FASTA files are text-based files for storing nucleotide or amino acid sequences.
Reading such files is not particularly difficult, yet most off the shelf packages are overloaded with strange dependencies.miniFASTA offers an alternative to this and brings many useful functions without relying on third party packages.InstallationUsing pip  / pip3:pipinstallminiFastaOr by source with pip:gitclonegit@github.com:not-a-feature/miniFASTA.gitcdminiFASTA
pipinstall.Or by conda:condainstall-cconda-forgeminifastaHow to useminiFASTA offers easy to use functions for fasta handling.
The five main parts are:read()write()fasta_object()toAmino()roRevComp()valid()len() / str() / eq() / iter()translate_seq()reverse_comp()Reading FASTA filesread()is a fasta reader which is able to handle compressed and non-compressed files.
Following compressions are supported: zip, tar, tar.gz, gz. If multiple files are stored inside an archive, all files are read.
This function returns a Iterator of fasta_objects. If only the sequences should be returnes set the positional argumentseq=True.
The entries are usually casted to upper case letters. Setread("path.fasta", upper=False)to disable casting.# Read fasta_objectsfos=mf.read("dolphin.fasta")# Iterator of fasta_objects.fos=list(fos)# Casts the iterator to list of fasta_objects# Read only the sequencefasta_strings=mf.read("dolphin.fasta",seq=True)# Iterator of string.fasta_strings=[fo.bodyforfoinmf.read("dolphin.fasta")]# Alternative# Options and compressed filesfos=mf.read("mouse.fasta",upper=False)# The entries won't be casted to upper case.fos=mf.read("reads.tar.gz")# Is able to handle compressed files.Writing FASTA fileswrite()is a basic fasta writer.
It takes a single or a list of fasta_objects and writes it to the given path.The file is usually overwritten. Setwrite(fo, "path.fasta", mode="a")to append file.fos=mf.read("dolphin.fasta")# Iterator of fasta entriesfos=list(fos)# Materializemf.write(fos,"new.fasta")fasta_object()The core component of miniFASTA is thefasta_object(). This object represents an FASTA entry and consists of a head and body.importminiFastaasmffo=mf.fasta_object(">Atlantic dolphin","CGGCCTTCTATCTTCTTC",stype="DNA")fo.getHead()orfo.head# >Atlantic dolphinfo.getSeq()orfo.body# CGGCCTTCTATCTTCTTC### Following functions are defined on a fasta_object():str(fo)# will return:# >Atlantic dolphin# CGGCCTTCTATCTTCTTC# Body lengthlen(fo)# will return 18, the length of the body# Equalityfo==fo# Truefo_b=mf.fasta_object(">Same Body","CGGCCTTCTATCTTCTTC")fo==fo_b# Truefo_c=mf.fasta_object(">Different Body","ZZZZAGCTAG")fo==fo_c# Falseforsinfo:# Iterates through the sequence of fo.fasta_object(...).valid()Checks if the body contains invalid characters.stypeof fasta_object needs to be set in order to check for illegal characters in its body.stype is one of:ANY : [default] Allows all characters.NA  : Allows all Nucleic Acid Codes (DNA & RNA).DNA : Allows all IUPAC DNA Codes.RNA : Allows all IUPAC RNA Codes.PROT: Allows all IUPAC Aminoacid Codes.Optional: allowedChars can be set to overwrite default settings.# The default object allows all characters.# Truefasta_object(">valid","Ä'_**?.asdLLA").valid()# Only if stype is specified, valid can check for illegal characters.# Truefasta_object(">valid","ACGTUAGTGU",stype="NA").valid()# False, as W is not allowed for DNA/RNAfasta_object(">invalid","ACWYUOTGU",stype="NA").valid()# Truefasta_object(">valid","AGGATTA",stype="ANY").valid(allowedChars="AGTC")# True, as stype is ignored if allowedChars is set.fasta_object(">valid","WYU",stype="DNA").valid(allowedChars="WYU")fasta_object(...).toAmino(translation_dict)Translates the body to an amino-acid sequence. Seetranlate_seq()for more details.fo.toAmino()fo.getBody()# Will return RPSIFFd={"CCG":"Z","CTT":"A"...}fo.toAmino(d)fo.getBody# Will return ZA...fasta_object(...).toRevComp(complement_dict)Converts the body to its reverse comlement. Seereverse_comp()for more details.fo.toRevComp()fo.getBody# Will return GAAGAAGATAGAAGGCCGSequence translationtranslate_seq()translates a sequence starting at position 0.
Unless translation_dict is provided, the standart bacterial code is used. If the codon was not found, it will be replaced by an~. Tailing bases that do not fit into a codon will be ignored.mf.translate_seq("CGGCCTTCTATCTTCTTC")# Will return RPSIFFd={"CGG":"Z","CTT":"A"}mf.translate_seq("CGGCTT",d)# Will return ZA.Reverse Complementreverse_comp()converts a sequence to its reverse comlement.
Unless complement_dict is provided, the standart complement is used. If no complement was found, the nucleotide remains unchanged.mf.reverse_comp("CGGCCTTCTATCTTCTTC")# Will return GAAGAAGATAGAAGGCCGd={"C":"Z","T":"Y"}mf.reverse_comp("TC",d)# Will return ZYLicenseCopyright (C) 2022 by Jules Kreuer - @not_a_feature
This piece of software is published unter the GNU General Public License v3.0
TLDR:

| Permissions      | Conditions                   | Limitations |
| ---------------- | ---------------------------- | ----------- |
| ✓ Commercial use | Disclose source              | ✕ Liability |
| ✓ Distribution   | License and copyright notice | ✕ Warranty  |
| ✓ Modification   | Same license                 |             |
| ✓ Patent use     | State changes                |             |
| ✓ Private use    |                              |             |Go toLICENSE.mdto see the full version.DependenciesIn addition to packages included in Python 3, this piece of software uses 3rd-party software packages for development purposes that are not required in the published version.
Go toDEPENDENCIES.mdto see all dependencies and licenses.