Skip to main content

Tests Coverage Status PyPI

gtfparse

Parsing tools for GTF (gene transfer format) files.

Reporting parsing progress

Pass progress_callback(stage, completed, total) to read_gtf to connect parsing to your own progress UI. The callback runs synchronously; exceptions from it stop parsing and propagate to the caller. Without a callback, gtfparse does not display a progress bar or add a progress-library dependency.

Stage Reports
read (0, None) before Polars loads/filters the file; (rows, rows) after it succeeds
attributes (0, rows), then every 10,000 rows, then (rows, rows)
convert (0, None) before output conversion/transforms; (rows, rows) after success

Counts refer to rows retained after features filtering, not bytes or overall percentages. None means the total is unknown: loading and conversion expose only stage boundaries, so use an indeterminate indicator during those steps. Attribute expansion is omitted when expand_attribute_column=False. A stage that fails does not emit completion. An empty filtered result is supported; its attributes stage emits a single (0, 0) event. Empty input files retain the existing Polars NoDataError behavior.

For example, with the optional tqdm package installed:

from gtfparse import read_gtf
from tqdm.auto import tqdm

with tqdm(unit="rows") as bar:
    def show_progress(stage, completed, total):
        if stage != bar.desc:
            bar.total = total
            bar.reset()
            bar.set_description_str(stage)
        bar.total = total
        bar.update(completed - bar.n)
        bar.refresh()

    df = read_gtf("gene_annotations.gtf", progress_callback=show_progress)

parse_gtf reports the read stage, parse_gtf_and_expand_attributes reports read and attributes, parse_gtf_pandas reports read and convert, and expand_attribute_strings reports only attributes using the same callback.

Quoted attribute values preserve spaces, semicolons, and apostrophes. Raw attributes (expand_attribute_column=False) retain their original quote marks.

Example usage

Parsing all rows of a GTF file into a Pandas DataFrame

from gtfparse import read_gtf

# returns GTF with essential columns such as "feature", "seqname", "start", "end"
# alongside the names of any optional keys which appeared in the attribute column
df = read_gtf("gene_annotations.gtf")

# filter DataFrame to gene entries on chrY
df_genes = df[df["feature"] == "gene"]
df_genes_chrY = df_genes[df_genes["seqname"] == "Y"]

Getting gene FPKM values from a StringTie GTF file

from gtfparse import read_gtf

df = read_gtf(
    "Transcripts.gtf",
    column_converters={"FPKM": float})

gene_fpkms = {
    gene_name: fpkm
    for (gene_name, fpkm, feature)
    in zip(df["seqname"], df["FPKM"], df["feature"])
    if feature == "gene"
}

Release files for gtfparse 2.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gtfparse 2.9.0
File Size Uploaded
gtfparse-2.9.0.tar.gz 35.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gtfparse 2.9.0
File Interpreter ABI Platform
gtfparse-2.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 57.2 kB

Release files / gtfparse-2.9.0.tar.gz

Download URL gtfparse-2.9.0.tar.gz
Size 35.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f345cebfa37338f821f28c130c93f43f29b49d927d0cb6088327e86935962b60
BLAKE2b-256 checksum
How to use checksums
156f182d795636bc305988923afd99b2cc633d6c3da6a4da2be6493c61de5887
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.6

Release files / gtfparse-2.9.0-py3-none-any.whl

Download URL gtfparse-2.9.0-py3-none-any.whl
Size 22.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
03c07284bc772c4652f61b505ef97cb1b790aa5bd88df19ba55b685f75715d09
BLAKE2b-256 checksum
How to use checksums
50a20ee1fdbfd63d68cc2b23a43406d21df7465d732276b3f2394b5ee8fe66bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.6

Release history Release notifications | RSS feed

2.9.1

2 release files

This release

2.9.0 This release

2 release files

2.8.1

2 release files

2.8.0

2 release files

2.7.2

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.3

2 release files

2.6.2

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.1

1 release file

1.3.0

1 release file

1.2.1

1 release file

1.2.0

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.7

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.3.0

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page