¿Cambiar el nombre de archivos que no son SIG a través de QGIS?

8

Tengo miles de archivos PDF que tienen nombres sin sentido y se encuentran dispersos en varias carpetas. Necesito cambiarles el nombre y, afortunadamente, a la mayoría de ellos se hace referencia a través de enlaces en capas espaciales, donde las tablas de atributos tienen información significativa sobre los archivos y una columna llamada 'hotlinks' tiene una ruta de directorio que apunta a los archivos PDF.

¿Hay algún método en QGIS que pueda seguir las rutas en las tablas de atributos y cambiar el nombre de los archivos PDF en esa ruta en función de los atributos en la capa? Tendré un nuevo campo que contiene el nuevo nombre, por ejemplo. concat ("Field1", "Field2", "Field3"), por lo que me gustaría cambiar el nombre de los archivos PDF en función de eso.

El problema ... los archivos PDF están dispersos y no están en la misma carpeta, por lo que el script no puede apuntar a una sola carpeta.

Cuenta
fuente
¿Existen los nombres sin sentido de los PDF en los atributos de los archivos de formas o los archivos de formas están en la misma ruta que los PDF?
Shiko
Los nombres sin sentido existen en los atributos, al final del enlace del directorio en el campo del enlace. P.ej. c: \ folder \ 123456.pdf
Bill
así que si tienes la fuente (sin sentido) y el objetivo (significativo) en el mismo registro, entonces puedes probar mi respuesta a continuación
Shiko

Respuestas:

15

Tienes 2 opciones:

1) Uso de la biblioteca PyQGIS + OS: [Debe ejecutar QGIS como administrador para cambiar el nombre de los archivos]

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) Uso de Python + biblioteca externa:
use la biblioteca a continuación para leer el archivo dbf + importar la biblioteca del sistema operativo :

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

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

Shiko
fuente
Gracias por eso. Sin embargo, no tengo mucha suerte ... si tengo esto en la consola de Python y ejecuto el comando, debería cambiar cualquier PDF referenciado en los registros de shapefile de c: /meaningless1.pdf a c: /meaningful1.pdf, etc. ? Uno de mis archivos shape también puede tener cientos de enlaces pdf. Lo siento, soy un poco un novato de Python.
Bill
También estoy ejecutando esto en la consola: Python Console Use iface para acceder a la interfaz API de QGIS o escriba help (iface) para obtener más información layer = iface.activeLayer () selection = layer.selectedFeatures () para la función en la selección: os.rename (feature ['source'], feature ['target'])
Bill
@Bill en PyQGIS, puede ingresar su código completo en el Editor y ejecutarlo en lugar de escribir línea por línea en la consola
Shiko
Gracias. Aunque todavía no tengo suerte, el script escribe un archivo de Python en mi carpeta c: \ users ..... temp, pero no cambia el nombre de los archivos PDF. Tengo el campo sin sentido hacia abajo como 'fuente' y el campo significativo hacia abajo como 'objetivo', ¿serían los nombres de campo la causa? Saludos
Bill
@Bill ¿Puedes intentar abrir QGIS como 'Administrador'? Tienes algún error ?
Shiko