Мне нужно программно переименовать некоторые поля в существующем шейп-файле. Информация хранится в соответствующем файле dbf, поэтому я использовал пакет dbf с кодом ниже (он был упрощен для совместного использования, но он функционален):
import os, dbf
HIGH_LEVEL = 2
LOW_LEVEL = 4
table = dbf.Table('Polygons.dbf')
table.open(mode=dbf.READ_WRITE)
try:
for oldName in table.field_names:
suf = int(oldName[-1:])
if suf == HIGH_LEVEL:
newName = oldName.upper().replace(str(HIGH_LEVEL), 'high')[:10]
print(f"{oldName} -> {newName}")
table.rename_field(oldName, newName)
if suf == LOW_LEVEL:
newName = oldName.upper().replace(str(LOW_LEVEL), 'low')[:10]
print(f"{oldName} -> {newName}")
table.rename_field(oldName, newName)
finally:
table.close()
Но в результате все символы в нижнем регистре. Взглянув на пакет dbf, функцию rename_field, все, что он делает, это строчные буквы старого имени и нового имени:
def rename_field(self, oldname, newname):
"""
renames an existing field
"""
oldname = oldname.lower()
newname = newname.lower()
...
Вы можете комментировать обе строки (я не рекомендую изменять пакеты но только для тестирования), и тогда вы получите первое переименование, но второе не удастся, потому что первое читается в нижнем регистре пакетом dbf и не может его найти.
С другой стороны, используя QGIS, ручное переименование в смешанном регистре может быть сделано, так что это не ограничение самих файлов dbf, а не ограничение пакета dbf.
Итак, любой может указать мне на модуль python, который позволяет мне переименовывать dbf имена полей со смешанным регистром?
Заранее большое спасибо.