CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-fiona

Fiona reads and writes spatial data files

88

1.10x
Overview
Eval results
Files

file-io.mddocs/

File I/O Operations

Core functionality for opening, reading, and writing geospatial vector data files. Fiona supports numerous formats through GDAL/OGR drivers including Shapefile, GeoJSON, GeoPackage, KML, and many others. The library provides both file-based and in-memory operations with support for virtual file systems and cloud storage.

Capabilities

Opening Collections

Opens a vector dataset collection for reading, writing, or appending. This is the primary entry point for working with geospatial data files.

def open(
    fp,
    mode="r",
    driver=None,
    schema=None,
    crs=None,
    encoding=None,
    layer=None,
    vfs=None,
    enabled_drivers=None,
    crs_wkt=None,
    ignore_fields=None,
    ignore_geometry=False,
    include_fields=None,
    wkt_version=None,
    allow_unsupported_drivers=False,
    opener=None,
    **kwargs
):
    """
    Open a collection for read, append, or write.

    Parameters:
    - fp: str or Path, dataset resource identifier or file object
    - mode: str, one of 'r' (read), 'a' (append), or 'w' (write)
    - driver: str, format driver name (required for write mode)
    - schema: dict, required in write mode, defines geometry and properties
    - crs: str or dict, coordinate reference system (required for write mode)
    - encoding: str, name of encoding used to encode/decode dataset
    - layer: int or str, integer index or name of layer in multi-layer dataset
    - vfs: str, deprecated, use URI scheme instead
    - enabled_drivers: list, optional list of driver names to use
    - crs_wkt: str, optional WKT representation of CRS
    - ignore_fields: list[str], field names to ignore on load
    - include_fields: list[str], subset of field names to include on load
    - ignore_geometry: bool, ignore geometry on load
    - wkt_version: WktVersion or str, version for CRS WKT
    - allow_unsupported_drivers: bool, don't limit to known working drivers
    - opener: callable or obj, custom dataset opener for virtual filesystem
    - kwargs: dict, other driver-specific parameters

    Returns:
    Collection object

    Raises:
    DriverError: When selected driver cannot provide requested capabilities
    """

Usage Examples

# Reading a shapefile
with fiona.open('data.shp', 'r') as collection:
    for feature in collection:
        print(feature['properties'])

# Writing GeoJSON with specific schema
schema = {
    'geometry': 'Point',
    'properties': {'name': 'str:50', 'population': 'int'}
}

with fiona.open('cities.geojson', 'w', driver='GeoJSON',
                schema=schema, crs='EPSG:4326') as collection:
    feature = {
        'geometry': {'type': 'Point', 'coordinates': [-122.5, 37.5]},
        'properties': {'name': 'San Francisco', 'population': 875000}
    }
    collection.write(feature)

# Reading specific layer from multi-layer file
with fiona.open('data.gpkg', 'r', layer='roads') as collection:
    print(f"Layer CRS: {collection.crs}")
    print(f"Feature count: {len(collection)}")

# Using custom field filtering
with fiona.open('large_dataset.shp', 'r', 
                include_fields=['name', 'category']) as collection:
    for feature in collection:
        # Only 'name' and 'category' fields are loaded
        print(feature['properties'])

Listing Layers

Lists the layers (collections) in a multi-layer dataset such as GeoPackage, PostGIS database, or other formats that support multiple layers.

def listlayers(fp, opener=None, vfs=None, **kwargs):
    """
    Lists the layers in a dataset.

    Parameters:
    - fp: str, Path, or file-like object, dataset identifier
    - opener: callable or obj, custom dataset opener
    - vfs: str, deprecated parameter
    - kwargs: dict, dataset opening options

    Returns:
    list[str]: List of layer name strings

    Raises:
    TypeError: If input is not str, Path, or file object
    """

Usage Examples

# List layers in a GeoPackage
layers = fiona.listlayers('database.gpkg')
print(f"Available layers: {layers}")

# List layers in a PostGIS database
layers = fiona.listlayers('PG:host=localhost dbname=gis user=postgres')
for layer in layers:
    print(f"Layer: {layer}")

# List layers in a zip archive
layers = fiona.listlayers('zip://data.zip')

Listing Directory Contents

Lists datasets in a directory or archive file, useful for discovering available data files in a location.

def listdir(fp, opener=None):
    """
    Lists datasets in a directory or archive file.

    Parameters:
    - fp: str or Path, directory or archive path
    - opener: callable or obj, custom dataset opener

    Returns:
    list[str]: List of dataset paths

    Raises:
    TypeError: If input is not str or Path
    """

Usage Examples

# List datasets in a directory
datasets = fiona.listdir('/path/to/gis/data')
for dataset in datasets:
    print(f"Found dataset: {dataset}")

# List datasets in a zip archive
datasets = fiona.listdir('zip://archive.zip')

# List datasets in a tar archive
datasets = fiona.listdir('tar://archive.tar.gz')

Removing Datasets

Deletes an OGR data source or one of its layers, including associated sidecar files.

def remove(path_or_collection, driver=None, layer=None, opener=None):
    """
    Delete an OGR data source or layer.

    Parameters:
    - path_or_collection: str, Path, or Collection, target to delete
    - driver: str, name of driver for deletion (usually auto-detected)
    - layer: str or int, name or index of specific layer to delete
    - opener: callable or obj, custom dataset opener

    Returns:
    None

    Raises:
    DatasetDeleteError: If data source cannot be deleted
    """

Usage Examples

# Remove entire dataset
fiona.remove('unwanted_data.shp')

# Remove specific layer from multi-layer dataset
fiona.remove('database.gpkg', layer='temporary_layer')

# Remove using Collection object
with fiona.open('data.shp', 'r') as collection:
    # Process data...
    pass
# Remove the dataset after processing
fiona.remove(collection)

Memory Files

In-memory operations for working with geospatial data without disk I/O, useful for temporary processing and testing.

class MemoryFile:
    def __init__(self, file_or_bytes=None, filename=None, ext=""):
        """
        BytesIO-like object backed by in-memory file.

        Parameters:
        - file_or_bytes: bytes or file-like object, initial content
        - filename: str, optional filename for format detection
        - ext: str, file extension for format detection
        """
    
    def open(self, mode=None, driver=None, schema=None, crs=None, **kwargs):
        """
        Open and return Collection for the memory file.

        Returns:
        Collection object
        """

Usage Examples

from fiona.io import MemoryFile

# Create in-memory GeoJSON
schema = {'geometry': 'Point', 'properties': {'name': 'str'}}

with MemoryFile() as memfile:
    with memfile.open(driver='GeoJSON', mode='w', 
                      schema=schema, crs='EPSG:4326') as collection:
        feature = {
            'geometry': {'type': 'Point', 'coordinates': [0, 0]},
            'properties': {'name': 'Origin'}
        }
        collection.write(feature)
    
    # Read back from memory
    memfile.seek(0)
    with memfile.open('r') as collection:
        for feature in collection:
            print(feature)

# Work with existing bytes data
geojson_bytes = b'{"type": "FeatureCollection", "features": []}'
with MemoryFile(geojson_bytes) as memfile:
    with memfile.open('r') as collection:
        print(f"Driver: {collection.driver}")

Driver Support

Fiona supports numerous geospatial data formats through GDAL/OGR drivers:

Common Formats

  • Shapefile (ESRI Shapefile): Traditional GIS format with .shp, .shx, .dbf files
  • GeoJSON (GeoJSON): Web-friendly JSON format for geospatial data
  • GeoPackage (GPKG): Modern SQLite-based format supporting multiple layers
  • KML (KML, LIBKML): Google Earth format
  • CSV (CSV): Comma-separated values with geometry columns
  • PostGIS (PostgreSQL): PostgreSQL spatial database

Archive Support

  • ZIP files: Access datasets within zip archives using zip:// prefix
  • TAR files: Access datasets within tar archives using tar:// prefix

Cloud Storage

  • AWS S3: Access via /vsis3/bucket/path virtual file system
  • Google Cloud: Access via /vsigs/bucket/path virtual file system
  • Azure: Access via /vsiaz/container/path virtual file system

Error Handling

File I/O operations can raise several specific exceptions:

  • DriverError: Unsupported driver or mode combinations
  • DataIOError: General I/O errors with driver registration
  • DriverIOError: Format-specific driver errors
  • DatasetDeleteError: Dataset deletion failures
  • PathError: Invalid dataset path errors
  • FieldNameEncodeError: Field name encoding issues

Install with Tessl CLI

npx tessl i tessl/pypi-fiona

docs

cli.md

collection-management.md

crs.md

data-model.md

environment.md

file-io.md

index.md

schema.md

transforms.md

utilities.md

tile.json