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()