Mais

Preciso definir arcpy.env.workspace no início do meu código Python?

Preciso definir arcpy.env.workspace no início do meu código Python?


Eu sou novo no Arcpy e tenho feito tarefas simples, como AddField_management e updateCursor. No entanto, tenho recebido mensagens de erro, como erros 99999 etc. Os erros que recebo estão relacionados ao bloqueio de esquema ou à não atualização da camada. Portanto, preciso executar parte do código, fechar meu mxd e abri-lo novamente, fazer isso indefinidamente.

Provavelmente estou fazendo algo errado ou esquecendo algo. Por exemplo, eu sou não definindo env.workspace ou in_memory ou criando arquivos temporários _lyr. Este é um exemplo de um código simples que estou usando, do início ao fim.

inFeatures = "MyLayer" fields = ['x', 'y'] # Adicione campos aos seus inFeatures para o campo em campos: arcpy.AddField_management (inFeatures, str (field), "DOUBLE") com arcpy.da.UpdateCursor (inFeatures , ('x', 'y', "forma @")) como cursor: para linha no cursor: linha [0] = linha [2] .firstPoint.X linha [1] = linha [2] .lastPoint.X cursor.updateRow (linha)

Recebo os seguintes erros, 'x' foi criado por 'y' não era. Eu fecho meu mxd e o abro novamente, e posso ver o campo 'y'. Agora eu executo UpdateCursor, nada muda (ainda ver Null> values). Ou recebo o erro

Foi especificada uma coluna que não existe

Fecho o mxd, abro-o novamente e vejo as colunas atualizadas. Isso está acontecendo com todos os meus códigos, não apenas este (ou seja, não é refrescante). Minha pergunta é, eu preciso, sempre, definir meu env.workspace? Estou executando o ArcGIS 10.1, os arquivos são conjuntos de dados de recursos, usando a janela Python no ArcGIS, o caminho do arquivo não é longo, as camadas não têm espaços.


Seu código básico é muito bom. De acordo com meus comentários:

arcpy.da.UpdateCursor (inFeatures, ('x', 'y', "forma @"))

deveria estar

arcpy.da.UpdateCursor (inFeatures, ['x', 'y', 'forma @'])

Os colchetes fazem uma lista que é o que a ferramenta está esperando.

Os bloqueios de esquema ocorrem quando você tem os mesmos dados abertos em várias fontes ou deixou um cursor aberto - usandocomgarante que o cursor seja fechado corretamente. Você pode considerar a inclusão de verificação de erros para bloqueios usandotente: exceto:blocos.

Ao adicionar um campo a um objeto de camada, não é incomum que o novo campo fique inacessível na camada, portanto, é melhor adicionar o campo à fonte de dados e refazer a camada. Você pode obter a fonte de dados da camada, pois é uma das propriedades dos objetos da camada.

import arcpy, sys inFeatures = "MyLayer" fields = ["x1", "x2"] # já strings, não precisa str () mais tarde ds = inFeatures.dataSource dq = inFeatures.definitionQuery # a consulta usada para fazer o layer # Adicione campos aos seus inFeatures para campo em campos: try: arcpy.AddField_management (ds, field, "DOUBLE") exceto: arcpy.AddError ("Incapaz de adicionar campo" + campo) sys.exit (-1) # abandon o script # Refaça a camada arcpy.Delete_management ("MyLayer") # você não precisa fazer isso se definir arcpy.env.overwriteOutput = True arcpy.MakeFeatureLayer_management (ds, "MyLayer", dq) # com arcpy.da .UpdateCursor (inFeatures, ['x', 'y', "shape @"]) como cursor: # outra maneira de fazer isso: fields.append ("shape @") with arcpy.da.UpdateCursor (inFeatures, campos) como cursor: para linha no cursor: linha [0] = linha [2] .firstPoint.X # Coordenada X do primeiro ponto linha [1] = linha [2] .lastPoint.X # Coordenada X do último ponto cursor.updateRow ( fila)

Você não precisa definirarcpy.env.workspace, será padronizado para o que já está definido nos ambientes de geoprocessamento, que é definido durante a instalação em sua pasta pessoal (C: Usuários seu_nome Documentos ArcGIS Default.gdb).

Especificar o espaço de trabalho é importante para funções como ListFeatureClasses que retornam nomes de classes de recursos apenas (não caminhos); qualquer entrada / saída sem um caminho completo será considerada como referenciada ao espaço de trabalho atual, entãoarcpy.MakeFeatureLayer ("data", "data_layer")estará procurando em seu espaço de trabalho atual por uma classe de recurso chamada "dados" para fazer a camada - pode economizar alguma digitação nesses casos.


Adicionando à resposta de Emir Sürmen, você pode compilar todos os canais de texto no servidor, fazer uma nova lista apenas com seus ids e, em seguida, verificar:

Ou algo nesse sentido.

Você pode usar a função wait_for () dentro do seu comando. Aqui está um pequeno exemplo disso:

No entanto, você mesmo precisará descobrir como obter o ID do canal. Este exemplo verifica a existência de & quothello & quot.


A maioria das técnicas para stdin enviará a string de exploração para o programa, que terminará logo após o término da entrada. A melhor maneira de mantê-lo aberto depois e obter um shell ativo é adicionar um gato aguardando entrada em seu stdin. Deve ser assim se você acessar um arquivo:

Ou, assim, se quiser um comando shell:

Ou, finalmente, se você estiver passando pela rede:

Observe que não descobri como fazer com o gdb para manter a entrada aberta depois que a carga útil foi entregue.


Trabalhe com ambientes

Crie um ambiente virtual

Para criar um ambiente virtual, use o seguinte comando, onde & quot.venv & quot é o nome da pasta do ambiente:

Observação: Para saber mais sobre o módulo venv, consulte Criação de ambientes virtuais em Python.org.

Ao criar um novo ambiente virtual, um prompt será exibido para permitir que você o selecione para o espaço de trabalho.

Isso adicionará o caminho para o interpretador Python do novo ambiente virtual às configurações do seu espaço de trabalho. Esse ambiente será usado ao instalar pacotes e executar o código por meio da extensão Python. Para obter exemplos de como usar o ambiente virtual em projetos, consulte os tutoriais Python, Django e Flask.

Dica: Quando estiver pronto para implantar o aplicativo em outros computadores, você pode criar um arquivo requirements.txt com o comando pip freeze & gt requirements.txt (pip3 no macOS / Linux). O arquivo de requisitos descreve os pacotes que você instalou em seu ambiente virtual. Com apenas esse arquivo, você ou outros desenvolvedores podem restaurar esses pacotes usando pip install -r requirements.txt (ou, novamente, pip3 no macOS / Linux). Ao usar um arquivo de requisitos, você não precisa comprometer o próprio ambiente virtual para o controle de origem.

Crie um ambiente conda

A extensão Python detecta automaticamente ambientes conda existentes, desde que o ambiente contenha um interpretador Python. Por exemplo, o comando a seguir cria um ambiente conda com o interpretador Python 3.4 e várias bibliotecas, que o VS Code mostra na lista de interpretadores disponíveis:

Em contraste, se você não especificar um interpretador, como com conda create --name env-00, o ambiente não aparecerá na lista.

Para obter mais informações sobre a linha de comando conda, consulte ambientes Conda (conda.io).

Se você criar um novo ambiente conda enquanto o VS Code está em execução, use o Janela de Recarregar comando para atualizar a lista de ambientes mostrada com Python: selecione o intérprete caso contrário, você pode não ver o ambiente lá. Pode demorar um pouco para aparecer se você não vê-lo primeiro, aguarde 15 segundos e tente usar o comando novamente.

Para garantir que o ambiente esteja bem configurado a partir de uma perspectiva de shell, uma opção é usar um prompt do Anaconda com o ambiente ativado para iniciar o VS Code usando o código. comando. Nesse ponto, você só precisa selecionar o intérprete usando a Paleta de comandos ou clicando na barra de status.

Embora a extensão Python para VS Code não tenha integração direta com arquivos conda environment.yml, o VS Code em si é um ótimo editor YAML.

Os ambientes Conda não podem ser ativados automaticamente no VS Code Integrated Terminal se o shell padrão estiver definido como PowerShell. Para alterar o shell, consulte Terminal integrado - Configuração.

Você pode especificar manualmente o caminho para o executável conda a ser usado para ativação (versão 4.4+). Para fazer isso, abra a Paleta de comandos (⇧⌘P (Windows, Linux Ctrl + Shift + P)) e digite Preferências: Abra as configurações do usuário. Em seguida, defina python.condaPath, que está na seção de extensão Python de Configurações do usuário, com o caminho apropriado.

Selecione e ative um ambiente

Por padrão, a extensão Python procura e usa o primeiro interpretador Python que encontra no caminho do sistema. Para selecionar um ambiente específico, use o Python: selecione o intérprete comando do Paleta de Comandos (⇧⌘P (Windows, Linux Ctrl + Shift + P)).

Observação: Se a extensão Python não encontrar um interpretador, ele emitirá um aviso. No macOS, a extensão também emite um aviso se você estiver usando o interpretador Python instalado no SO, porque normalmente deseja usar um interpretador instalado diretamente. Em qualquer um dos casos, você pode desativar esses avisos definindo python.disableInstallationCheck como true nas configurações do usuário.

Você pode mudar de ambiente a qualquer momento. Mudar de ambiente ajuda a testar diferentes partes de seu projeto com diferentes interpretadores ou versões de biblioteca, conforme necessário.

O Python: selecione o intérprete comando exibe uma lista de ambientes globais disponíveis, ambientes conda e ambientes virtuais. (Consulte a seção Onde a extensão procura ambientes para obter detalhes, incluindo as distinções entre esses tipos de ambientes.) A imagem a seguir, por exemplo, mostra várias instalações Anaconda e CPython junto com um ambiente conda e um ambiente virtual (env) que está localizado dentro da pasta do espaço de trabalho:

Observação: No Windows, pode demorar um pouco para que o VS Code detecte os ambientes conda disponíveis. Durante esse processo, você pode ver & quot (em cache) & quot antes do caminho para um ambiente. O rótulo indica que o VS Code está atualmente trabalhando com informações armazenadas em cache para esse ambiente.

Selecionar um intérprete da lista adiciona uma entrada para python.pythonPath com o caminho para o intérprete dentro das configurações do espaço de trabalho. Como o caminho faz parte das configurações da área de trabalho, o mesmo ambiente já deve estar selecionado sempre que você abrir essa área de trabalho. Se quiser configurar um interpretador padrão para seus aplicativos, você pode adicionar uma entrada para python.pythonPath manualmente nas Configurações do usuário. Para fazer isso, abra a Paleta de comandos (⇧⌘P (Windows, Linux Ctrl + Shift + P)) e digite Preferências: Abra as configurações do usuário. Em seguida, defina python.pythonPath, que está na seção de extensão Python das Configurações do usuário, com o interpretador apropriado.

A extensão Python usa o ambiente selecionado para executar o código Python (usando o Python: execute o arquivo Python no Terminal comando), fornecendo serviços de linguagem (autocompletar, verificação de sintaxe, linting, formatação, etc.) quando você tem um arquivo .py aberto no editor e abre um terminal com o Terminal: Criar Novo Terminal Integrado comando. No último caso, o VS Code ativou automaticamente o ambiente selecionado.

Dica: Para evitar a ativação automática de um ambiente selecionado, adicione & quotpython.terminal.activateEnvironment & quot: false ao seu arquivo settings.json (ele pode ser colocado em qualquer lugar como irmão das configurações existentes).

Dica: Se o comando activate gerar a mensagem & quotActivate.ps1 não está assinado digitalmente. Você não pode executar este script no sistema atual. & Quot, então você precisa alterar temporariamente a política de execução do PowerShell para permitir que os scripts sejam executados (consulte Sobre as políticas de execução na documentação do PowerShell): Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Observação: Por padrão, o VS Code usa o interpretador identificado pela configuração python.pythonPath ao depurar o código. Você pode substituir esse comportamento especificando um caminho diferente na propriedade pythonPath de uma configuração de depuração. Consulte Escolha um ambiente de depuração.

A barra de status sempre mostra o intérprete atual.

A barra de status também reflete quando nenhum intérprete é selecionado.

Em ambos os casos, clicar nesta área da barra de status é um atalho conveniente para o Python: selecione o intérprete comando.

Dica: Se você tiver algum problema com o VS Code para reconhecer um ambiente virtual, registre um problema no repositório de extensões para que possamos ajudar a determinar a causa.

Especifique manualmente um intérprete

Se o VS Code não localizar automaticamente um intérprete que deseja usar, você pode definir o caminho para ele manualmente no arquivo settings.json das Configurações do espaço de trabalho. Com qualquer uma das entradas a seguir, você pode simplesmente adicionar a linha como um irmão a outras configurações existentes.)

Primeiro, selecione o Arquivo (Código no macOS) & gt Preferências & gt Definições comando de menu (⌘, (Windows, Linux Ctrl +,)) para abrir suas Configurações, selecione Área de trabalho.

Em seguida, execute uma das seguintes etapas:

Crie ou modifique uma entrada para python.pythonPath com o caminho completo para o executável Python (se você editar settings.json diretamente, adicione a linha abaixo como configuração):

Você também pode usar python.pythonPath para apontar para um ambiente virtual, por exemplo:

Você pode usar uma variável de ambiente na configuração do caminho usando a sintaxe $ . Por exemplo, se você criou uma variável chamada PYTHON_INSTALL_LOC com um caminho para um intérprete, pode usar o seguinte valor de configuração:

Observação: A substituição de variável só é suportada em arquivos de configuração do VS Code, ela não funcionará em arquivos de ambiente .env.

Usando uma variável de ambiente, você pode facilmente transferir um projeto entre sistemas operacionais onde os caminhos são diferentes, apenas certifique-se de definir a variável de ambiente no sistema operacional primeiro.

Ambientes e janelas de terminal

Depois de usar Python: selecione o intérprete, esse interpretador é aplicado ao clicar com o botão direito em um arquivo e selecionar Python: execute o arquivo Python no Terminal. O ambiente também é ativado automaticamente quando você usa o Terminal: Criar Novo Terminal Integrado comando, a menos que você altere a configuração python.terminal.activateEnvironment para false.

No entanto, iniciar o VS Code a partir de um shell no qual um determinado ambiente Python está ativado não ativa automaticamente esse ambiente no Terminal Integrado padrão. Use o Terminal: Criar Novo Terminal Integrado depois que o VS Code estiver em execução.

Observação: Os ambientes conda não podem ser ativados automaticamente no terminal integrado se o PowerShell estiver definido como o shell integrado. Consulte Terminal integrado - Configuração para saber como alterar o shell.

Todas as alterações feitas em um ambiente ativado no terminal são persistentes. Por exemplo, usar conda install & ltpackage & gt do terminal com um ambiente conda ativado instala o pacote nesse ambiente permanentemente. Da mesma forma, usar pip install em um terminal com um ambiente virtual ativado adiciona o pacote a esse ambiente.

Trocando intérpretes com o Python: selecione o intérprete comando não afeta os painéis de terminais que já estão abertos. Você pode, portanto, ativar ambientes separados em um terminal dividido: selecione o primeiro intérprete, crie um terminal para ele, selecione um intérprete diferente e, em seguida, use o botão de divisão (⌘ (Windows, Linux Ctrl + Shift + 5)) no título do terminal bar.

Escolha um ambiente de depuração

Por padrão, a configuração python.pythonPath especifica o interpretador Python a ser usado para depuração. No entanto, se você tiver uma propriedade pythonPath na configuração de depuração de launch.json, esse interpretador será usado. Para ser mais específico, o VS Code aplica a seguinte ordem de precedência ao determinar qual interpretador usar para depuração:

  1. propriedade pythonPath da configuração de depuração selecionada em launch.json
  2. configuração python.pythonPath no espaço de trabalho settings.json
  3. configuração python.pythonPath nas configurações do usuário.json

Para obter mais detalhes sobre a configuração de depuração, consulte Configurações de depuração.


Lendo dados de dispositivo externo

Preciso de ajuda com a leitura de dados. Na minha situação, tenho um Arduino Uno conectado via USB ao RPi. O Arduino está enviando dados para o RPi com Serial.write (). O Arduino gera 128 bytes a cada período de leitura.

Parte do código do Arduino que produz a saída tem a seguinte aparência:

Atualmente, tenho meu código Python assim:

Tentei usar ser.read () mas a saída que obtive é um monte de símbolos. Se eu modificar o código no Arduino para Serial.println () Posso ler os dados com ser.readline () no lado do RPi, mas os dados obtidos não têm 128 amostras em um período (eu só obtive cerca de 40 amostras em um período). Eu acho que isso pode ser devido ao Serial.println () comando que converteu 3 bytes em um valor inteiro e estes não são utilizáveis ​​para mim.

Eu entendo que há uma diferença com Serial.println e Serial.write. Serial.write grava dados binários na porta serial e Serial.print imprime dados na porta serial como texto ASCII legível.

Eu quero converter os dados recebidos para uint8 formato adicionando outra linha de código Python como este:

Para que eu pudesse ver os valores (0-255). Ainda estou tendo problemas com isso. Qualquer conselho? Qualquer ajuda é muito apreciada. :)


Dentro de sh, que na verdade é um traço no Ubuntu, o retorno do comando embutido pode retornar apenas valores numéricos - status de saída, que têm um significado no contexto de uma função ou script originado. Fonte man sh:

A sintaxe do comando de retorno é

Tudo o resto com seu script de shell parece correto. Acho que você precisa usar echo $ COLOR em vez disso Retorna e suprimir outros ecos.

No caso de você precisar retornar mais dados para o script principal, você pode enviar tudo como uma linha e dividir os Campos por algum caractere que fará o papel de delimitador no script principal, com base no qual você pode converter a string em um array. Por exemplo (onde, é o nosso delimitador e -n substituirá o caractere de nova linha dentro de echo):

As outras informações fornecidas pelo script e não exigidas pelo script principal podem ser redirecionadas para algum arquivo de log:

Infelizmente, não tenho muita experiência com Python, mas aqui está um script de exemplo .py que pode lidar com a saída do script .sh acima (referência):


4 respostas 4

Você pode executar este script para substituir todos os materiais duplicados em seu arquivo. Basta colá-lo no editor de texto e clicar no botão Executar script.

Ele pesquisa todos os objetos e, em seguida, compara a primeira parte do nome do material (a parte antes do sufixo .001) com quaisquer materiais com o mesmo nome e, se uma correspondência for encontrada, substitui o material do objeto pelo material correspondente.

A ideia seria fazer uma cópia Full Scene e então rodar este script para remover todas as duplicatas do material.

Antes de executar o script, certifique-se de que seus materiais estejam nomeados corretamente. Qualquer material que termine com 0,001, 0,002 ou 003, será substituído por sua "versão original".

O crédito pelo script vai para o usuário Liero nesta página do BlenderArtist.org

Ctrl + Shift + O termina o trabalho recarregando o arquivo.

O seguinte complemento cria uma cena vazia, duplica todos os objetos e os vincula ao novo sem duplicar os materiais dos objetos:

Depois de habilitado, pressione a barra de espaço em Vista 3D e execute 'Duplicate Scene'. Observe que é uma cópia dos objetos da cena apenas, as configurações de renderização e mundo são padrão.

custom-scene-duplicator.py

Instale o add-on via Arquivo> Preferências do usuário> Complementos> Instalar do arquivo.

Isso não seria tão simples quanto usar o Nova cena> Vincular objetos Nova cena> Dados do objeto de link?

Você pode então selecionar todos os objetos e pressionar U Tornar usuário único> objeto ou Tornar usuário único> Objeto e dados e você terá virtualmente duplicado sua cena com todos os novos objetos com dados de objetos independentes, mas mantendo os mesmos materiais.

A única ressalva é que, se você tiver instâncias de objeto dentro da mesma cena, seus relacionamentos também serão perdidos ao criar um único usuário.

Você pode contornar isso selecionando todos os objetos com os mesmos dados de objeto usando Shift + L Selecione Vinculado> Dados do objeto, certificando-se de que um deles é o objeto ativo, tornando o objeto ativo único usuário e vinculando todos eles de volta ao novo com Ctrl + L Link> Dados do Objeto

Uma dica muito simples para limpar uma cena de todos os seus materiais e pedaços órfãos é exportar no formato wavefront (.obj). Como resultado, você obterá dois arquivos. O arquivo Obj contém seus objetos com pouquíssimas diferenças em relação ao blender, exceto os modificadores soltos. Por exemplo, se um modificador subsurf estiver ativo enquanto você exporta, o objeto será salvo com subsurf aplicado. Arrays, wireframe ou lattice são definitivamente aplicados a objetos .obj.

O outro arquivo (.mtl) contém todos os materiais (com suas texturas dependentes). Apague ou remame-o e reimporte .obj em um ambiente de liquidificador vazio. Todos os pedaços indesejados são limpos do novo arquivo de mesclagem.

Pode ser útil ao migrar uma cena para Cycles Render ou se sua mistura estiver cheia de pedaços órfãos (vazamentos de memória) que não foram apagados quando sua referência pai foi suprimida.


Resumo dos problemas SSL do ArcGIS Server

por ThomasColson

Isso é realmente apenas para me ajudar a "marcar" todos os problemas de SSL, já que estamos tendo muitos deles, espero que ajude outras pessoas!

  1. Falha nos serviços SSL seguros no construtor de aplicativos da Web.
  2. ArcGIS Portal 10.3 - Certificado SSL para rede interna PERGUNTAS
    1. Inclui um verificador REST pouco conhecido que testa o status do certificado: legal! https: //%3Cserver.domain.com%3E: 7443 / arcgis / sharing / checkUrl.jsp? url =% 3CinsertURLthatisboundtothecer.
    1. O cartaz parece não conseguir obter um certificado, explorado usando seu próprio servidor CA
    1. Leve para casa a mensagem: use o DNS Aliasing adequado!
    1. Parece que a ativação de "HTTPS" causa apenas alguns erros no aplicativo
    1. Não use o Amazon ECW se precisar de PKI!
    1. Outro teste de funcionalidade SSL Teste de servidor SSL (desenvolvido por Qualys SSL Labs)
    1. PKI- Portal não funciona com python
    1. Habilitando SSL quebra ferramentas GP
    1. Os horrores do proxy reverso
      1. 40694 - Configurar um proxy reverso com ArcGIS 10.1 for Server em IIS ARR com SSL
      1. Os certificados devem usar FQDN
      1. Outra confirmação de que certificados curinga não funcionam
      1. SSL é necessário para criptografar senhas
      1. lembre-se, o ArcGIS Server é um Apache Web Server separado: também precisa de um certificado confiável! AGIS Cert precisa ser assinado por CA confiável
      1. SSL mata performance. Que surpresa.
      1. Este é um grande problema: se a organização requer apenas HTTPS, não pode consumir conteúdo HTTP no portal

      4 respostas 4

      Você deseja realizar uma ação 10 vezes. O contador de loop nunca importa para o seu código, você só precisa fazer 10 perguntas. Da maneira como você escreveu o código, você tem:

      em 6 lugares, todos os quais são necessários, caso contrário, você faria loops muitas vezes. Isso é muito sujeito a erros. Se você adicionou suporte para divisão, você teria que escrever mais duas vezes. Uma boa regra é nunca se repetir!

      A melhor maneira de fazer um loop 10 vezes em Python, quando você não se importa com a contagem de loops, é:

      Não precisa se preocupar em aumentar a contagem. Deixe range () fazer isso por você.

      Não se repita

      O código para adicionar, subtrair e multiplicar é o mesmo. A única diferença é a operação que você faz e a operação que imprime. Quase sempre você já refatorou isso. Você usa op () para realizar a operação. Então, vamos dar um passo adiante:

      E então, estou praticamente copiando sua lógica para adição com apenas uma mudança real (e renomeando algumas variáveis):

      Também renomei suas variáveis ​​para real e esperado, em vez de pergunta e resposta - uma vez que a pergunta não se refere realmente a uma pergunta. Além disso, + = 1 é uma maneira mais concisa de expressar o incremento de um.

      Diga ao usuário a resposta?

      Se o usuário errar, deseja dar a resposta correta?

      Terminando

      Você não precisa verificar a contagem (ou, agora, _) para saber quando terminar. Apenas espere o loop terminar, momento em que você pode imprimir a partitura. Portanto, o fluxo se parece com:

      Embora normalmente você expresse a pontuação como X / 10, não entre 10 é X. Isso parece engraçado.


      3 respostas 3

      Alternativamente, você pode usar o comando: g. Eu faria:

      comentar. Isso é bom porque é mais legível (e mais curto) do que um comando de pesquisa e substituição. Explicação:

      A recomendação funciona da mesma forma, exceto que procura por uma string diferente e usa I # em vez de ^ x. I # significa inserir # na primeira coluna sem espaço em branco.

      Existe uma solução que pode ser bem simples se você quiser usar um plugin: NERDCommenter.

      Este plugin é feito para "comentários intensamente orgásticos" de acordo com sua página no github. Mais precisamente, ele cria vários mapeamentos para lidar com comentários e um dos mapeamentos é & ltLeader & gtci, que permite alternar os comentários de uma linha.

      Combinado a um comando global, ele permite que você faça o que puder. Digamos que seu líder pode usar o seguinte comando:

      E isso irá alternar os comentários nas linhas correspondentes a pdb.set_trace ()

      Observe que você não pode usar facilmente & ltleader & gt diretamente no comando normal (veja minha pergunta sobre isso)

      Se o seu líder for & ltspace & gt, você terá que fazer:

      Observe que é fácil mapeá-lo para uma chave:

      E, finalmente, a grande vantagem deste método é que o NERDcommenter lida automaticamente com o idioma que você está editando, para que possa criar um comando que alternará os comentários nas linhas que correspondem a um padrão definido, independentemente do idioma que você está editando:

      Agora, não importa qual idioma você está editando, você pode usar: ToogleCom foo para alternar o comentário de todas as linhas correspondentes a foo. (Se o seu líder não for, veja o parágrafo anterior da minha resposta)

      Se precisar de estilos de comentário diferentes, você pode alterar o mapeamento usado, consulte: h NERDComFunctionalitySummary para obter mais informações.


      Usando Python para inserir JSON no PostgreSQL [fechado]

      Quer melhorar esta questão? Atualize a pergunta para que fique no tópico para administradores de banco de dados Stack Exchange.

      Eu tenho a seguinte tabela:

      Agora, basicamente, quero carregar um objeto json com a ajuda de um script python e deixar o script python inserir o json na tabela. Eu consegui inserir um JSON via psql, mas não é realmente inserir um arquivo JSON, é mais inserir uma string equivalente a um arquivo JSON e o PostgreSQL apenas o trata como json.

      O que fiz com o psql para conseguir inserir o arquivo JSON:

      Lendo o arquivo e carregando o conteúdo em uma variável

      Inserindo o JSON usando json_populate_recordset () e a variável predefinida 'content':

      Isso funciona bem, mas quero que meu script Python faça o mesmo. No código a seguir, a conexão já foi estabelecida:

      Eu obtenho o seguinte erro:

      Se eu colar o conteúdo JSON em pgAdmin4 e usar a string dentro de json_populate_recordset (), ele funciona. Presumo que estou lidando com o arquivo JSON errado.