From e41b03ca574ed79c58bad9dc9e72d84dc98af19b Mon Sep 17 00:00:00 2001 From: Lionel GUEZ Date: Fri, 11 Oct 2024 20:19:31 +0200 Subject: [PATCH] Add option `my_range` to method iterRecords Using iterRecords with a range option should be faster than calling record within a loop, since we avoid the multiple calls to seek. --- shapefile.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shapefile.py b/shapefile.py index 12af74d..07bc3c0 100644 --- a/shapefile.py +++ b/shapefile.py @@ -1809,7 +1809,7 @@ def records(self, fields=None): records.append(r) return records - def iterRecords(self, fields=None): + def iterRecords(self, fields=None, my_range=None): """Returns a generator of records in a dbf file. Useful for large shapefiles or dbf files. To only read some of the fields, specify the 'fields' arg as a @@ -1820,7 +1820,9 @@ def iterRecords(self, fields=None): f = self.__getFileObj(self.dbf) f.seek(self.__dbfHdrLength) fieldTuples, recLookup, recStruct = self.__recordFields(fields) - for i in xrange(self.numRecords): + if my_range is None: + my_range = xrange(self.numRecords) + for i in my_range: r = self.__record( oid=i, fieldTuples=fieldTuples, recLookup=recLookup, recStruct=recStruct )