Fiona now reads and writes multi-layer data. The user advocating for this feature has Esri file geodatabases in mind. I'm developing and testing with directories of shapefiles, but since I'm using OGR's datasource abstraction it (modulo the usual driver quirks) "should just work" with FileGDBs.
Here's how it works. By the way, I'm using Python 3.3.1 and a virtualenv in these examples. Fiona works equally well with Python 3.3 and 2.6-2.7. I'm not testing Python 3.0-3.2 right now, so your mileage there may vary.
(fiona)$ python Python 3.3.1 (default, Apr 29 2013, 22:56:52) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
First, I will take a feature from the testing shapefile distributed with Fiona and copy the file's schema, driver, crs, and encoding (as a dict named 'meta').
>>> import fiona >>> with fiona.open('docs/data/test_uk.shp') as c: ... f = next(c) ... meta = c.meta ...
Now, forget about that file. We're going to open a new, not previously existing collection from a multi-layer source with the same metadata as the test dataset and write that one feature to it.
>>> import tempfile >>> path = tempfile.mkdtemp() >>> with fiona.open(path, 'w', layer='foo', **meta) as c: ... c.write(f) ...
Fiona collections are context managers, remember? They write to disk when the block they're defined on ends.
Here's a peek into the directory we created:
Now we'll open a collection from that source and read it to verfiy that the write went as expected. Fiona's listlayers() function tells us what layers are available.
>>> fiona.listlayers(path) ['foo'] >>> with fiona.open(path, layer='foo') as c: ... print(len(c)) ... g = next(c) ... print(f == g) ... 1 True
Its sole feature is identical to the one we passed to write().
The pattern for working with an Esri FileGDB is the same; just replace the directory path with the path to your .gdb file. If you try this (please do!) and have any problems, please let me know at https://github.com/Toblerity/Fiona/issues.
Downloads, etc at https://pypi.python.org/pypi/Fiona/0.16. This is pretty much it for features before 1.0. I'm going to see what kind of bugs people find in 0.16, adjust the new features as I get feedback, and beginning writing the final 1.0 manual.