Renommer des fichiers non SIG via QGIS?

8

J'ai des milliers de fichiers PDF qui ont des noms sans signification et sont dispersés dans plusieurs dossiers. J'ai besoin de les renommer, et heureusement, la plupart d'entre eux sont référencés via des liens dans des couches spatiales, où les tables d'attributs contiennent des informations significatives sur les fichiers et une colonne appelée 'hotlinks' a un chemin de répertoire pointant vers les pdf.

Existe-t-il une méthode dans QGIS qui peut suivre les chemins dans les tables d'attributs et renommer les fichiers PDF dans ce chemin en fonction des attributs de la couche? J'aurai un nouveau champ qui contient le nouveau nom, par exemple. concat ("Field1", "Field2", "Field3"), donc je voudrais renommer les pdf en fonction de cela.

Le hic ... les pdf sont dispersés et ne sont pas dans le même dossier, donc le script ne peut pas pointer vers un seul dossier.

Facture
la source
les noms sans signification des PDF existent-ils dans les attributs des fichiers de forme ou les fichiers de forme sont-ils dans le même chemin que les PDF?
Shiko
Les noms sans signification existent dans les attributs, à la fin du lien d'annuaire dans le champ de lien. Par exemple. c: \ folder \ 123456.pdf
Bill
donc si vous avez la source (sans signification) et la cible (significative) dans le même enregistrement, alors vous pouvez essayer ma réponse ci
Shiko

Réponses:

15

Vous avez 2 options:

1) Utilisation de la bibliothèque PyQGIS + OS: [Doit exécuter QGIS en tant qu'administrateur pour renommer les fichiers]

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) Utilisation de Python + bibliothèque externe:
Utilisez la bibliothèque ci-dessous pour lire le fichier dbf + importer la bibliothèque 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'])

Référence:
https://pypi.python.org/pypi/dbfread

Shiko
la source
Merci pour ça. Je n'ai pas beaucoup de chance cependant ... si je l'ai dans la console Python et que j'exécute la commande, cela devrait changer tout pdf référencé dans les enregistrements de fichiers de formes de c: /meaningless1.pdf à c: /meaningful1.pdf etc. ? Un de mes fichiers de formes peut également contenir des centaines de liens PDF. Désolé, je suis un peu un noob en python.
Bill
J'exécute également ceci dans la console: console Python Utilisez iface pour accéder à l'interface API QGIS ou tapez aide (iface) pour plus d'informations layer = iface.activeLayer () selection = layer.selectedFeatures () pour la fonction dans la sélection: os.rename (fonctionnalité ['source'], fonctionnalité ['cible'])
Bill
@Bill dans PyQGIS, vous pouvez entrer votre code complet dans l'éditeur et l'exécuter au lieu d'écrire ligne par ligne dans la console
Shiko
Merci. N'ayant toujours pas de chance cependant, le script écrit un fichier python dans mon dossier c: \ users ..... temp, mais ne renomme pas les pdf. J'ai le champ vide de sens comme «source» et le champ significatif comme «cible», les noms de champ en seraient-ils la cause? Santé
Bill
@Bill Pouvez-vous essayer d'ouvrir le QGIS en tant qu '«Administrateur»? Avez-vous une erreur?
Shiko