我需要以编程方式重命名现有 shapefile 中的某些字段。信息存储在相应的 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包的限制。
那么,任何人都可以将我指向一个允许我使用混合大小写重命名 dbf 字段名称的 python 模块?
提前非常感谢。