- Было дело, отметил я библиотеку pyshp. Весьма полезная штука оказалась. Правда обнаружился один глючок, связанный, как указал один из разработчиков, с нарушениями стандарта в хидере DBF-файла. Ну, стандарт не я придумал, как и файлы корявые — не я создал. Мое дело маленькое, дали файлы — обработай. И самый простой способ сделать это заключается в поправке одной строки кода. Поскольку мою поправку отклонили, сохраню ее здесь. Пригодится еще:
-
--- c:/d/code/shape/pyshp-read-only/Python2/shapefile.py Wed Apr 27 03:19:26 2011 +++ C:/d/code/shape/shapefile.py Wed Apr 27 03:23:43 2011 @@ -244,11 +244,11 @@ headerLength = self.__dbfHeaderLength() numFields = (headerLength - 33) // 32 for field in range(numFields): fieldDesc = list(unpack("<11sc4xBB14x", f.read(32))) name = 0 - fieldDesc[name] = fieldDesc[name][:fieldDesc[name].index("\x00")] + fieldDesc[name] = fieldDesc[name].replace('\0', '') fieldDesc[name] = fieldDesc[name].lstrip() self.fields.append(fieldDesc) terminator = f.read(1) assert terminator == "\r" self.fields.insert(0, ('DeletionFlag', 'C', 1, 0)) |
- На мой взгляд, старая строка кода стремная полюбому. Как ни крути, а определять строку исходя из 100% уверенности, что в ней есть нолик несколько опрометчиво. Особенно считав эту строку из файла неизвестного происхождения.
- Может мой вариант (да и не мой он вовсе, это изначальная версия кода) и не отвечает стандарту DBF на 100%, зато работает. А это главное.
-
Комментариев нет:
Отправить комментарий