PyQGIS:シェープファイルのフィールドをループして、部分文字列を使用して名前を変更します

Aug 22 2020

QGISでシェープファイルの複数のフィールド名(約150)の名前を変更しようとしています。それらの名前は異なりますが、それらはすべて終わりで_xf20あり、それぞれのこの部分を削除したいと思います。

私は役立つ可能性のある他のトピックを調べて、これを見つけました:コードでPyQGIS3を使用してシェープファイルのフィールドの名前を変更します:


layer = iface.activeLayer()

# Open editing session
layer.startEditing()

# Rename field
for field in layer.fields():
    if field.name() == 'oldName':
        idx = layer.fields().indexFromName(field.name())
        layer.renameAttribute(idx, 'newName')

# Close editing session and save changes
layer.commitChanges()

そしてこれ:QGISPythonを使用して文字列「RAWI」のすべてのフィールドを削除します

しかし、それが始まりであっても、私はPythonの初心者であり、自分のケースにそれらを適応させる方法が見つかりません。

すべてのフィールドを手動で編集したくはありません。

回答

3 BenW Aug 22 2020 at 11:36

以下は、古いフィールド名をスライスして、削除する最後の5文字「_xf20」の前のすべてを返すことで機能するはずです。

私はこれをQGIS3.14.15でテストしましたが、問題なく動作しましたが、何か問題が発生した場合に備えて、最初にシェープファイルのバックアップコピーを作成してください。

layer = iface.activeLayer()

layer.startEditing()

for field in layer.fields():
    if field.name().startswith('Z10'):
        idx = layer.fields().lookupField(field.name())
        new_name = field.name()[:-5]
        layer.renameAttribute(idx, new_name)

layer.commitChanges()