Mengganti nama file non-GIS melalui QGIS?

8

Saya memiliki ribuan pdf yang memiliki nama yang tidak berarti, dan tersebar di beberapa folder. Saya perlu mengubah nama mereka, dan untungnya sebagian besar dari mereka direferensikan melalui tautan dalam lapisan spasial, di mana tabel atribut memiliki informasi yang bermakna tentang file dan kolom yang disebut 'hotlink' memiliki jalur direktori yang menunjuk ke pdf.

Apakah ada metode di QGIS yang dapat mengikuti jalur di tabel atribut, dan mengganti nama pdf di jalur tersebut berdasarkan atribut di lapisan? Saya akan memiliki bidang baru yang berisi nama baru, mis. concat ("Field1", "Field2", "Field3"), jadi saya ingin mengganti nama pdf berdasarkan itu.

Tangkapan ... pdf tersebar di sekitar dan tidak ada di folder yang sama, jadi skrip tidak bisa hanya menunjuk ke satu folder.

Tagihan
sumber
apakah nama-nama bermakna PDF ada di atribut file bentuk atau file bentuk berada di jalur yang sama dari PDF?
Shiko
Nama-nama yang tidak berarti ada di atribut, di akhir tautan direktori di bidang tautan. Misalnya. c: \ folder \ 123456.pdf
Bill
jadi jika Anda memiliki sumber (tidak berarti) dan target (bermakna) dalam catatan yang sama, maka Anda dapat mencoba jawaban saya di bawah
Shiko

Jawaban:

15

Anda memiliki 2 opsi:

1) Menggunakan pustaka PyQGIS + OS: [Harus menjalankan QGIS sebagai Administrator untuk mengganti nama file]

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) Menggunakan Python + perpustakaan eksternal:
Gunakan perpustakaan di bawah ini untuk membaca file dbf + import os library:

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'])

Referensi:
https://pypi.python.org/pypi/dbfread

Shiko
sumber
Terima kasih untuk itu. Saya tidak memiliki banyak keberuntungan ... jika saya memiliki ini di konsol Python dan menjalankan perintah, itu harus mengubah pdf apa pun yang direferensikan dalam catatan shapefile dari c: /meaningless1.pdf ke c: /meaningful1.pdf dll. ? Salah satu shapefile saya dapat memiliki ratusan tautan pdf juga. Maaf, saya agak seperti python noob.
Tagihan
Saya juga menjalankan ini di konsol: Konsol Python Gunakan iface untuk mengakses antarmuka QGIS API atau Ketik bantuan (iface) untuk info lebih lanjut layer = iface.activeLayer () selection = layer.selectedFeatures () untuk fitur dalam seleksi: os.rename (fitur ['sumber'], fitur ['target'])
Bill
@Bill di PyQGIS, Anda dapat memasukkan kode lengkap di Editor dan menjalankannya alih-alih menulis baris demi baris di konsol
Shiko
Terima kasih. Masih belum beruntung, skrip menulis file python ke folder c: \ users ..... temp saya, tetapi tidak mengganti nama pdf-nya. Saya memiliki bidang yang tidak berarti di bawah sebagai 'sumber' dan dan bidang yang berarti di bawah sebagai 'target', akankah nama-nama bidang menjadi penyebabnya? Cheers
Bill
@Bill Bisakah Anda mencoba membuka QGIS sebagai 'Administrator'? Apakah Anda mendapatkan kesalahan?
Shiko