1

我需要以编程方式重命名现有 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 模块?

提前非常感谢。

4

1 回答 1

0

字段名称是小写的,仅用于演示。它们以大写形式存储在文件中,您可以以大写形式访问它们(自 v0.98.1 起)。

于 2020-04-20T16:58:12.450 回答