Renomeando arquivos não GIS através do QGIS?

8

Tenho milhares de PDFs que têm nomes sem sentido e estão espalhados por várias pastas. Eu preciso renomeá-los e, felizmente, a maioria deles é referenciada através de links em camadas espaciais, onde as tabelas de atributos têm informações significativas sobre os arquivos e uma coluna chamada 'hotlinks' possui um caminho de diretório apontando para os PDFs.

Existe um método no QGIS que pode seguir os caminhos nas tabelas de atributos e renomear os PDFs nesse caminho com base nos atributos da camada? Vou ter um novo campo que contém o novo nome, por exemplo. concat ("Campo1", "Campo2", "Campo3"), então eu gostaria de renomear os PDFs com base nisso.

O problema ... os PDFs estão espalhados e não estão na mesma pasta; portanto, o script não pode apenas apontar para uma pasta.

Conta
fonte
os nomes sem sentido dos PDFs existem nos atributos dos arquivos de formas ou estão no mesmo caminho dos PDFs?
Shiko
Os nomes sem sentido existem nos atributos, no final do link do diretório no campo link. Por exemplo. c: \ folder \ 123456.pdf
Bill
por isso, se você tem a fonte (sem sentido) e de destino (significativa) no mesmo registro, então você pode tentar a minha resposta abaixo
Shiko

Respostas:

15

Você tem 2 opções:

1) Usando a biblioteca PyQGIS + OS: [É necessário executar o QGIS como administrador para renomear arquivos]

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) Usando a biblioteca externa Python +:
Use a biblioteca abaixo para ler o arquivo 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'])

Referência:
https://pypi.python.org/pypi/dbfread

Shiko
fonte
Obrigado por isso. Porém, não estou tendo muita sorte ... se eu tiver isso no console Python e executar o comando, ele deverá alterar os pdfs mencionados nos registros do shapefile de c: /meaningless1.pdf para c: /meaningful1.pdf etc. ? Um dos meus shapefiles também pode ter centenas de links em pdf. Desculpe, eu sou um pouco de um python noob.
Bill
Também estou executando isso no console: Console Python Use iface para acessar a interface da API QGIS ou Digite help (iface) para obter mais informações layer = iface.activeLayer () selection = layer.selectedFeatures () para o recurso na seleção: os.rename (feature ['source'], feature ['target'])
Bill
@ Bill no PyQGIS, você pode inserir seu código completo no Editor e executá-lo em vez de escrever linha por linha no console
Shiko
Obrigado. Ainda sem sorte, o script grava um arquivo python na minha pasta temp c: \ users ..... temp, mas não renomeia os pdfs. Eu tenho o campo sem sentido como 'origem' e o campo significativo como 'destino', os nomes dos campos seriam a causa? Cheers
Bill
@ Bill Você pode tentar abrir o QGIS como 'Administrador'? Você recebeu algum erro?
Shiko 21/02