Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-04-27

shapefile.py

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

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) Klaipeda (13) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)