- Было дело, отметил я библиотеку 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%, зато работает. А это главное.
-
Комментариев нет:
Отправить комментарий