diff --git a/shapefile.py b/shapefile.py index f63d9c8..1a08904 100644 --- a/shapefile.py +++ b/shapefile.py @@ -477,7 +477,7 @@ def __dbfHeader(self): self.__recStruct = Struct(fmt) def __recordFmt(self): - """Calculates the size of a .shp geometry record.""" + """Calculates the format and size of a .dbf record.""" if not self.numRecords: self.__dbfHeader() fmt = ''.join(['%ds' % fieldinfo[2] for fieldinfo in self.fields]) @@ -549,11 +549,13 @@ def records(self): """Returns all records in a dbf file.""" if not self.numRecords: self.__dbfHeader() + records = [] f = self.__getFileObj(self.dbf) f.seek(self.__dbfHeaderLength()) - flat = unpack(self.__recStruct.format * self.numRecords, f.read(self.__recStruct.size * self.numRecords)) - rowlen = len(self.fields) - 1 - records = list(izip(*(iter(flat),) * rowlen)) + for i in range(self.numRecords): + r = self.__record() + if r: + records.append(r) return records def iterRecords(self):