QGISを介して非GISファイルの名前を変更しますか?


8

意味のない名前のpdfが何千もあり、いくつかのフォルダに分散しています。名前を変更する必要があります。幸い、それらのほとんどは空間レイヤーのリンクを介して参照されます。属性テーブルにはファイルに関する意味のある情報があり、「hotlinks」という列にはpdfを指すディレクトリパスがあります。

属性テーブルのパスをたどり、レイヤーの属性に基づいてそのパス内のPDFの名前を変更できるQGISのメソッドはありますか?新しい名前を含む新しいフィールドがあります。concat( "Field1"、 "Field2"、 "Field3")なので、それに基づいてPDFの名前を変更します。

キャッチ... pdfは散らばっていて、同じフォルダーにないので、スクリプトは1つのフォルダーを指すだけではありません。


意味のないPDFの名前がシェープファイルの属性に存在するか、またはシェープファイルがPDFの同じパスにありますか?
志古

リンクフィールドのディレクトリリンクの最後にある属性には、意味のない名前が存在します。例えば。c:\ folder \ 123456.pdf
Bill

ソース(意味のない)とターゲット(意味のある)が同じレコードにある場合、以下の私の答えを試すことができます
Shiko

回答:


15

次の2つのオプションがあります。

1)PyQGIS + OSライブラリの使用: [ ファイルの名前を変更するには、管理者としてQGISを実行する必要があります]

import os #needed to replace filenames
layer = iface.activeLayer() #get selected layer
selection = layer.selectedFeatures()
iface.activeLayer().selectAll()
for feature in selection:    
    if os.path.exists(feature['source']):
        os.rename(feature['source'], feature['target']) #rename files

2)Python +外部ライブラリの
使用以下のライブラリを使用して、dbfファイル+ osライブラリをインポートします。

import os #needed to replace filenames
from dbfread import DBF #read dbf file
for record in DBF('MyFile.dbf'):
   if os.path.exists(record['source']):
      os.rename(record['Source'], record['target'])

リファレンス:https :
//pypi.python.org/pypi/dbfread


それをありがとう。私はあまり運が悪いのですが...これをPythonコンソールで実行してコマンドを実行すると、シェープファイルレコードで参照されているすべてのpdfがc:/meaningless1.pdfからc:/meaningful1.pdfなどに変更されます。 ?私のシェープファイルの1つに、何百ものPDFリンクを含めることもできます。申し訳ありませんが、私は少しPython初心者です。
ビル

また、これをコンソールで実行しています:Pythonコンソールifaceを使用してQGIS APIインターフェースにアクセスするか、help(iface)と入力して詳細情報を表示します。layer= iface.activeLayer()selection = layer.selectedFeatures()機能の選択:os.rename (feature ['source']、feature ['target'])
ビル

@Bill PyQGISに、あなたはエディタであなたの完全なコードを入力することができますし、コンソールで行ずつ書くのではなく、それを実行
棟方

ありがとう。まだ運が悪いのですが、スクリプトはpythonファイルをc:\ users ..... tempフォルダーに書き込みますが、pdfの名前は変更しません。「ソース」として意味のないフィールドがあり、「ターゲット」として意味のあるフィールドがあるので、フィールド名が原因でしょうか?乾杯
ビル

@Bill QGISを「管理者」として開こうとすることはできますか?エラーが発生しますか?
志古
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.