Layer (A) .shp). Recebi uma resposta deste post no" /> Layer (A) .shp). Recebi uma resposta deste post no" />
Mais

Não é possível renomear o arquivo de saída usando script autônomo para QGIS


Eu gostaria de renomear todos os arquivos de saída depois que meu script terminar de processá-los, adicionando "(A)" após seu nome de arquivo (por exemplo. Layer.shp -> Layer (UMA).shp). Recebi uma resposta deste post sobre os comandos necessários para renomear arquivos. Coloquei isso no final do script, mas recebo a seguinte mensagem ao executar o script:

WindowsError: [Erro 32] O processo não pode acessar o arquivo porque ele está sendo usado por outro processo: 'Layer.dbf'

Pensei ter fechado os processos relacionados associados ao QGIS, mas parece que não. O seguinte é um snippet:

import os, sys, glob, shutil de qgis.core import * from qgis.gui import QgsMapCanvas de PyQt4.QtGui import * from os.path import expanduser home = expanduser ("~") # Caminho da pasta dos resultados para shapefiles path_dir = home + " Desktop  Test " path_res = path_dir + "Resultados " Cellsize = 200 layerPath = path_dir + "Layer.shp" extend = QgsVectorLayer (layerPath, ", 'ogr') .extent () centerx = ( extension.xMinimum () + extend.xMaximum ()) / 2 centery = (extend.yMinimum () + extend.yMaximum ()) / 2 width = extend.xMaximum () - extend.xMinimum () height = extend.yMaximum ( ) - extend.yMinimum () def run (): outputs_0 = general.runalg ("qgis: creategrid", Cellsize, Cellsize, width, height, centerx, centery, 1, 'EPSG: 7405', None) # Definir diretório e pesquise todos os shapefiles de polígono os.chdir (path_dir + "Polygon Shapefile ") para fname em glob.glob ("*. shp"): # Clip os arquivos .shp dentro do diretório para Grid e salve os arquivos na pasta Result outputs_1 = general .runalg ("qgis: clip", outputs_0 ['SAVENAME'], fname, path_res + "/" + fname) # Caminhos dos arquivos de forma na pasta Resultado com saída de compreensão da lista = [shp para shp em glob.glob (path_res + "* .shp")] run () QgsApplication.exitQgis () app.exit ( ) os.chdir (path_res) para fname em glob.glob ("*. *"): name, ex = fname.rsplit (".", 1) shutil.move (fname, os.path.join (path_res, " {} {} {} ". formato (nome," (A). ", ex)))

Você tentou adicionar o "(A)" antes de passar o parâmetro de saída para o algoritmo? Você precisaria adicionar 3 linhas ao loop for nocorre()método:

para fname em glob.glob ("*. shp"): pieces = list (os.path.splitext (fname)) pieces.insert (1, "(A)") nameWithA = "" .join (pieces) outputs_1 = general.runalg ("qgis: clip", outputs_0 ['SAVENAME'], fname, path_res + "/" + nameWithA)

Como abrir uma linha fechada no QGIS?

Mais precisamente, como eu faria para excluir uma conexão entre dois nós no QGIS?

Eu tenho uma linha fechada onde desejo excluir uma conexão entre dois nós diferentes, transformando a linha de uma linha fechada em uma linha aberta. Não é um polígono nem nada, é apenas uma camada de linha.

É uma rede? Se não, use a ferramenta de vértice para reposicionar o nó final. Não há relacionamento entre nós e linhas, a menos que seja uma rede. Pelo menos nenhum que eu conheça. Talvez dependa do formato dos seus dados. Estou sempre pronto para aprender algo novo.

Obrigado pela resposta rápida!

Não, é apenas uma linha dentro de uma camada de linha típica (o tipo que você obtém quando usa & quotPolígonos para linhas & quot em Ferramentas de geometria). Ele não tem um ponto final porque eu o converti de polígono.

Se não, use a ferramenta de vértice para reposicionar o nó final.

Desculpe, não tenho certeza do que você quer dizer com isso. Esta é uma imagem do que estou trabalhando. Você pode ver o elemento com cruzes vermelhas e entre a primeira cruz vermelha no lado esquerdo e a última cruz vermelha no lado direito, há uma linha amarela desenhada ali. Se eu tentar usar a ferramenta de vértice para movê-lo, ela pegará os dois nós no final da linha.

ATUALIZAÇÃO: encontrei uma solução, acabei de dividir a linha e excluir os nós finais e, em seguida, reingressar nas linhas restantes. Gostaria de saber no futuro se há uma maneira mais rápida de fazer isso dentro da ferramenta de vértice.


QGIS 3.10.6 congela e atrasa muito

Olá. Nos últimos dois ou três meses, o QGIS começou a congelar muito recentemente. Isso geralmente acontece por 3-5 segundos depois que eu abro uma camada, mudo os rótulos ou qualquer coisa realmente. Isso nunca aconteceu antes e realmente começou a me incomodar agora. Alguém mais está tendo problemas semelhantes com a versão mais recente? Tenho certeza de que isso não é um problema devido ao hardware. Meu projeto atual tem muitas camadas, mas apenas algumas delas estão ativas ao mesmo tempo. No entanto, isso nunca foi um problema antes.

Obrigado! Vou tentar 2. Pode ser 3 também, embora eu só use dados de minhas unidades locais.

3.10.7 LTR e 3.14.0 foram lançados, você já experimentou?

Não. Não baixei o 3.14 porque não era um LTR. Eu & # x27m vou tentar isso. Obrigado.

Haven & # x27t verificou o LTR mais recente, mas o único recurso que eu realmente não & # x27t gostei sobre a movimentação do QGIS do ArcMap foi corrigido em 3.14 - tabela de atributos encaixada e com abas amp. Vai economizar muito tempo, mesmo que seja uma coisa tão pequena.

Eu tinha as versões anteriores funcionando bem, mas atolava muito rapidamente quando jogava todos os meus dados nele ou era hospedado remotamente. Como outros postaram, muitas variáveis, então verifique sua lista.

Não, não é só você. Eu tenho problemas semelhantes e não fui capaz de corrigi-los ainda. O problema é uma capacidade de resposta muito lenta de toda a interface QGIS. Sempre que alterno entre um painel, tenho um atraso de 5-10 segundos, incluindo muitos congelamentos e trepidações durante a inicialização.
Tentei as últimas 3 versões e todas têm o mesmo problema. Ele funciona perfeitamente na mesma máquina do Ubuntu. (Xeon X5650 4 GHz, 16 GB de RAM, Radeon r9 280x)

Eu até tentei uma instalação limpa do Windows 10 (Pro 64 Bit) para resolver o problema. A primeira coisa que instalei após os drivers foi o QGIS e ainda os mesmos atrasos e travamentos.

Tenho certeza de que este é um problema com o Windows 10 e não tenho ideia do que fazer a respeito.


8 Respostas 8

Isso não está funcionando porque iconv primeiro cria o arquivo de saída (uma vez que o arquivo já existe, ele o trunca) e, em seguida, começa a ler seu arquivo de entrada (que agora está vazio). A maioria dos programas se comporta dessa maneira.

Crie um novo arquivo temporário para a saída e mova-o para o lugar.

Se o iconv de sua plataforma não tiver -o, você pode usar um redirecionamento de shell para o mesmo efeito.

Essa resposta se aplica não apenas a iconv, mas a qualquer programa de filtro. Alguns casos especiais devem ser mencionados:


4 respostas 4

Com GNU sed, você pode fazer (mesmo sem extensão):

A primeira regex corresponderá

  • 'hs / (. *) (. [^.] * $) / 2 / taz: axs // 1 /' coloque a extensão no espaço de retenção (se houver). Deixe o resto no espaço do padrão.
  • 's / ([0-9] <1,>) / n000 1 n / g' Coloque cada sequência de números em linhas separadas, precedendo-os com 3 zeros.

Depois que cada número a modificar foi estendido para ter zeros à esquerda e estar em sua própria linha, faça:

  • 's / n [0-9] * ([0-9] <3>) n / 1 / g' Extraia os últimos 3 dígitos de cada linha de dígitos.
  • 'Gs / n //' reconecta a extensão capturada no início.

Portanto, para renomear arquivos (os nomes dos arquivos não devem conter novas linhas e a extensão deve seguir um ponto):

Remova o eco quando estiver satisfeito com o script para realmente alterar os arquivos.

Você pode usar perl-rename (que deve ser instalável com sudo apt install rename em sistemas baseados em Debian). Usando esses arquivos como entrada:

Que irá renomeá-los para:

Observe como o 100 não foi alterado e o resto foi preenchido. Observe também como 4 in .m4a e mp4 não foi afetado.

IMPORTANTE: execute o comando com -n primeiro para ver o que acontecerá antes de realmente renomear os arquivos:

A expressão regular procura extensões de um ou mais dígitos ( d +) que vêm antes de pelo menos um. (? =. * .). Isso evita a alteração de um número encontrado no ramal. No entanto, isso não funcionará se os nomes dos seus arquivos não tiverem extensão. Se você tiver arquivos como esse, use-o apenas para preencher todos os números:

O s / antigo / novo / é o operador de substituição que substituirá o antigo pelo novo. Aqui, porque o ( d +) está entre parênteses, tudo o que for correspondido será capturado e então estará disponível como $ 1 no lado direito da substituição. Portanto, substituímos os dígitos por si mesmos com 0 preenchido (sprintf ("% 03d", $ número) imprimirá $ número preenchido com 0s até que seu comprimento seja 3). Finalmente, o sinalizador e nos permite usar expressões (aqui, sprintf) e g torna a substituição global, para todas as correspondências na linha de entrada (nome do arquivo).

Observe que se você tiver um número que já é preenchido com 0 com mais de 3 0s, isso o reduzirá para preenchido com 3-0. Portanto, o arquivo 00000001.mp3 se tornará o arquivo 001.mp3.


Estou rasterizando arquivos SHP de polígono para imagens TIFF, mas há faixas de ruído aleatório. Eu fiz esse processo exato antes, sem problemas. Alguém sabe porque isto está acontecendo?

Comecei com um arquivo de contorno de linha e converti cada elevação em polígonos, salvando cada um como uma camada diferente.

Em seguida, usei Rasterizar (vetor para raster) para exportar como uma imagem, completando o processo com um processo em lote.

Já exportei polígonos dessa forma antes (capa terrestre), embora os dados tenham sido baixados como polígonos, e eu literalmente nunca vi esse problema antes.

A única outra alteração que fiz em comparação com as execuções anteriores foi renderizar a 50 m / px em vez de 10 m / px. 50m / px é a resolução que eu realmente uso, mas já dimensionei as imagens no Photoshop.

Acabei de concluir uma corrida a 10m / px e o problema também apareceu.

Eu o executei 4 vezes agora em 50m / px, e a mesma coisa aconteceu todas as vezes. Nem todas as imagens têm ruído, e a localização e as camadas específicas em que ocorre são diferentes a cada vez.

O ruído nunca parece realmente cruzar as áreas renderizadas, mas ainda será difícil removê-lo porque ele aparece em um lugar diferente a cada vez.


Capturando dados da versão do Windows¶

Um aplicativo do Windows pode exigir um arquivo de recurso de versão. Um recurso de versão contém um grupo de estruturas de dados, algumas contendo inteiros binários e outras contendo strings, que descrevem as propriedades do executável. Para obter detalhes, consulte a página Estruturas de Informações da Versão da Microsoft.

Os recursos de versão são complexos e alguns elementos são opcionais, outros obrigatórios. Quando você visualiza a guia de versão de uma caixa de diálogo Propriedades, não há uma relação simples entre os dados exibidos e a estrutura do recurso. Por esta razão, o PyInstaller inclui o comando pyi-grab_version. Ele é chamado com o nome do caminho completo de qualquer executável do Windows que tenha um recurso de versão:

O comando grava um texto que representa um recurso de versão em formato legível na saída padrão. Você pode copiá-lo da janela do console ou redirecioná-lo para um arquivo. Em seguida, você pode editar as informações da versão para adaptá-las ao seu programa. Usando pyi-grab_version, você pode encontrar um executável que exibe o tipo de informação que você deseja, copiar seus dados de recursos e modificá-los para se adequar ao seu pacote.

O arquivo de texto da versão é codificado em UTF-8 e pode conter caracteres não ASCII. (Os caracteres Unicode são permitidos nos campos de string de recurso de versão.) Certifique-se de editar e salvar o arquivo de texto em UTF-8, a menos que tenha certeza de que ele contém apenas valores de string ASCII.

Seu arquivo de texto de versão editado pode ser fornecido com a opção --version-file = para pyinstaller ou pyi-makespec. Os dados de texto são convertidos em um recurso de versão e instalados no aplicativo empacotado.

Em um recurso de versão, há dois valores binários de 64 bits, FileVersion e ProductVersion. No arquivo de texto da versão, eles são fornecidos como tuplas de quatro elementos, por exemplo:

Os elementos de cada tupla representam valores de 16 bits do mais significativo ao menos significativo. Por exemplo, o valor (2, 0, 4, 0) é resolvido em 0002000000040000 em hexadecimal.

Você também pode instalar um recurso de versão a partir de um arquivo de texto após a criação do aplicativo empacotado, usando o comando pyi-set_version:

pyi-set_version version_text_file arquivo executável

O utilitário pyi-set_version lê um arquivo de texto de versão conforme escrito por pyi-grab_version, converte-o em um recurso de versão e instala esse recurso no arquivo executável Especificadas.

Para usos avançados, examine um arquivo de texto de versão conforme escrito por pyi-grab_version. Você descobre que é o código Python que cria um objeto VSVersionInfo. A definição de classe para VSVersionInfo é encontrada em utils / win32 / versioninfo.py na pasta de distribuição do PyInstaller. Você pode escrever um programa que importa versioninfo. Nesse programa, você pode avaliar o conteúdo de um arquivo de texto de informações de versão para produzir um objeto VSVersionInfo. Você pode usar o método .toRaw () desse objeto para produzir um recurso de versão na forma binária. Ou você pode aplicar a função unicode () ao objeto para reproduzir o arquivo de texto da versão.


Este é provavelmente o mais simples e é multiplataforma. Ele apenas usa a configuração padrão do Arara - não há necessidade de adicionar scripts ou regras adicionais.

O código a seguir produzirá great-name.pdf, independentemente do nome do próprio arquivo .tex:

onde & ltfilename & gt.tex é o nome do seu arquivo .tex. Arara então executa pdflatex --jobname great-name & ltfilename & gt.tex e produz great-name.pdf.

Uma coisa a ter em mente com este método é que os arquivos auxiliares também usarão o nome especificado. Então você terá great-name.aux e great-name.log - não & ltfilename & gt.aux ou & ltfilename & gt.log. Isso pode ser uma vantagem, é claro, mas pode ser uma desvantagem e, portanto, vale a pena estar ciente.


3 respostas 3

Acabei de colocar seu código para trabalhar no meu lado.

  1. Atribua permissões NTFS de controle total a 'C: BCPFiles bcpFile.dat ao usuário que você usará no SQL Server Management Studio para executar a consulta
  2. Execute novamente sua consulta no SQL Server Management Studio

Ou, apenas para superar o seguinte erro, tente:

no tipo de linha de comando (para criar um arquivo fictício - sim, haverá erros de importação, mas apenas para deixar de abrir o arquivo).

Execute novamente sua consulta no SQL Server Management Studio

Se a opção A funcionar, é um problema de permissão. Se a opção B funcionar (superando o erro original), você tem um arquivo aberto - embora ele não pareça estar aberto. Existem utilitários que ajudam a encontrar esses arquivos abertos, mas uma maneira fácil e barata de testar é apenas reiniciar o servidor - espero que seja uma caixa de desenvolvimento / teste.


Muitas ferramentas GNU como cp, mv e tar suportam a criação de arquivos de backup quando o destino existe. Ou seja, ao copiar foo para bar, se já houver um arquivo chamado bar, o existir bar será renomeado e, após a barra de cópia, conterá o conteúdo de foo. Por padrão, bar é renomeado para bar

, mas o comportamento pode ser modificado:

Existem outras variantes, como a criação de backups numerados apenas quando um já existe. Veja o manual do coreutils para mais detalhes.

para encontrar possíveis candidatos, e mcopy apareceu.

mostra uma opção promissora -D clash-option não é legal? Mas não tão legal - não é descrito. Mas há algumas dicas para mtools.dvi, que pesquisei no meu sistema, sem sucesso, e via google, sem sucesso, mas depois, com o google, pesquisei diretamente por mcopy clash-option e encontrei este site.

para testes de autorenome e targetdir a - em vez de autorenaming, ele me pediu para cada arquivo ignorar ou substituir, aquele s estúpido. .

Minha versão é mtools-4.0.10 e a página de ajuda é de 1996 a 15 anos. Devemos realmente perder alguns recursos, entretanto?

Eu dividiria o trabalho em duas etapas:

  • Faça uma função abreviada, que gera um nome único para um arquivo, se esse nome estiver ocupado.
  • Execute find e execute aquele script para cada arquivo que deseja copiar.

Devemos ajudar nesta abordagem? :)

Aqui está um script, para autorenar arquivos:

e esta é minha invocação de teste:

Nota: -maxdepth, -name e -type foram usados ​​para restringir drasticamente o número de arquivos afetados. Eu não testei o script para estruturas de arquivo mais profundas, nem para espaços em branco em nomes de arquivos e outros caracteres funky como alimentação de linha, alimentação de página e assim por diante.

Usei .1 porque não causa problemas na maioria dos comandos, enquanto um (e um) geralmente precisam ser mascarados.


Assista o vídeo: BAIXANDO SHAPFILE DE QALQUER CAR E IMPROTANDO PARA O QGIS (Outubro 2021).