From: SourceForge.net <no...@so...> - 2012-08-21 14:59:25
|
Bugs item #3560359, was opened at 2012-08-21 07:03 Message generated for change (Comment added) made by gisxperts You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=746843&aid=3560359&group_id=140566 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Reuter (gisxperts) Assigned to: Nobody/Anonymous (nobody) Summary: dbfpy does not handle NaN or Infinity value in dbf files Initial Comment: db = dbf.Dbf(infile, new=False) [Dbg]>>> rec=db[0] Traceback (most recent call last): File "<interactive input>", line 1, in <module> File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\dbf.py", line 242, in __getitem__ return self.RecordClass.fromStream(self, self._fixIndex(index)) File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\record.py", line 121, in fromStream return cls.fromString(dbf, cls.rawFromStream(dbf, index), index) File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\record.py", line 140, in fromString [_fd.decodeFromRecord(string) for _fd in dbf.header.fields]) File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\fields.py", line 173, in decodeFromRecord return self.decodeValue(self.rawFromRecord(record)) File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\fields.py", line 241, in decodeValue return float(value) ValueError: invalid literal for float(): -1.#IND00000000000 ---------------------------------------------------------------------- >Comment By: Reuter (gisxperts) Date: 2012-08-21 07:59 Message: Patch for the problem extend the lines in field.py line 228ff. however a cleaner solution would be better. def decodeValue(self, value): """Return a number decoded from ``value``. If decimals is zero, value will be decoded as an integer; or as a float otherwise. Return: Return value is a int (long) or float instance. """ value = value.strip(" \0") if "." in value: # a float (has decimal separator) if '#IND' in value: return(-9999.9999) elif '#QNAN' in value: return(-9999.9999) else: return float(value) elif '*' in value: return(-9999.9999) elif value: # must be an integer return int(value) else: return 0 ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=746843&aid=3560359&group_id=140566 |