`fc.next()` is a simple iterator: <!-- language: lang-py --> fc = fiona.open("my.shp") first_feature = fc.next() second_feature = fc.next() ... Or more simply: <!-- language: lang-py --> for feat in fiona.open("my.shp") print feat The result is a Python dictionary. For example with one result (feat=) <!-- language: lang-py --> {'geometry': {'type': 'Point', 'coordinates': (180627.0, 330190.0)}, 'type': 'Feature', 'id': '154', 'properties': OrderedDict([(u'cadmium', 2.7), (u'copper', 27.0), (u'lead', 124.0), (u'zinc', 375.0), (u'elev', 8.261), (u'dist', 0.0122243), (u'om', 5.5), (u'ffreq', u'3'), (u'soil', u'3'), (u'lime', u'0'), (u'landuse', u'W'), (u'dist.m', 40.0)])} As all dictionaries in Python, there are keys and values. <!-- language: lang-py --> print feat.keys() ['geometry', 'type', 'id', 'properties'] So <!-- language: lang-py --> print feat['id'] #gives the id 154 print feat['properties']['cadmium'] # gives the value of the cadmium attribute 2.7 print feat['geometry'] # gives the geometry, GeoJSON format {'type': 'Point', 'coordinates': (180627.0, 330190.0)} If you want to transform this geometry in a shapely geometry use the [shape][1] function: <!-- language: lang-py --> print type(feat['geometry']) <type 'dict'> from shapely.geometry import shape print shape(feat['geometry']) POINT (180627 330190) print type(shape(feat['geometry'])) <class 'shapely.geometry.point.Point'> Final <!-- language: lang-py --> with fiona.open("my.shp") as input: for feat in input: geom = shape(feat['geometry']) id = feat['id'] cadmium = feat['properties']['cadmium'] .... [1]: http://toblerity.org/shapely/manual.html#geointerface