Mais

ArcMap usando Python para renomear uma classe de recurso com base nos resultados de impressão

ArcMap usando Python para renomear uma classe de recurso com base nos resultados de impressão


Eu gostaria de renomear uma classe de recurso com base nos campos EDITOR e DATE. Eu escrevi este código:

import arcpy fc = "C:  Users  PythonTesting.gdb  MyFile" f1, f2, f3 = "EDITOR", "DATE", cláusula "OBJECTID" = arcpy.AddFieldDelimiters (fc, f3) + "= 1" para a linha em ordenado (arcpy.da.SearchCursor (fc, [f1, f2], cláusula)): imprimir ("{0} _ {1}". formato (linha [0], linha [1]))

E funciona muito bem, imprime a única linha de resultados que desejo. Mas agora não consigo descobrir como usar esses resultados como saída para uma renomeação. Eu usei a renomeação antes, mas sem essa expressão.

Eu verifiquei este pensando que ajudaria, mas ainda não consigo descobrir. Como renomear classes de recursos com base em valores de campo na tabela de atributos?


Descobri isso. Rapaz, isso foi fácil!

>>> import arcpy… fc = "C:  Users  PythonTesting.gdb  My_File"… f1, f2, f3 = "EDITOR", "COUNTY", "OBJECTID"… cláusula = arcpy.AddFieldDelimiters (fc, f3) + "= 1"… para a linha ordenada (arcpy.da.SearchCursor (fc, [f1, f2], cláusula)):… print ("{0} _ {1}". Format (linha [0], linha [ 1]))… nome = ("{0} _ {1}". Formato (linha [0], linha [1]))… arcpy.Rename_management (fc, nome)

Meu maior problema era a forma como a data é formatada. Mas saber que essa função funciona é bom, agora só preciso acertar a data.


Como imprimir instâncias de uma classe usando print ()?

Estou aprendendo as cordas em Python. Quando tento imprimir um objeto de classe Foobar usando o impressão() função, recebo uma saída como esta:

Existe uma maneira de definir o comportamento de impressão (ou o representação de string) de um aula e os seus objetos? Por exemplo, quando chamo print () em um objeto de classe, gostaria de imprimir seus membros de dados em um determinado formato. Como fazer isso em Python?

Se você estiver familiarizado com as classes C ++, o acima pode ser alcançado para o padrão Ostream adicionando um amigo Ostream & amp operator & lt & lt (ostream & amp, const Foobar & amp) método para a classe.


Quarto - reutilize o código e não se repita

Quando você olhar agora para suas novas funções create_score () e create_timer (), você notará que elas são quase idênticas. Eles diferem apenas na posição e na string exibida. Mas eles compartilham fonte, cor e assim por diante. Então, adicionamos alguns parâmetros e unificamos esses

da mesma forma, podemos unificar o jogador e o AIplayer. Se você deseja alterar o tamanho do player, agora há uma única linha de código para alterar. Na verdade, esses jogadores, campos de texto e o bongo deveriam ser classes, mas por enquanto vamos deixar assim.

Todos os pontos até agora são válidos para qualquer linguagem de programação e absolutamente importantes. Contagem de capacidade de manutenção, legibilidade e testabilidade.


ArcMap usando Python para renomear uma classe de recurso com base em resultados de impressão - Sistemas de informações geográficas

Esta série irá apresentá-lo aos gráficos em python com Matplotlib, que é indiscutivelmente a biblioteca de gráficos e visualização de dados mais popular para Python.

Instalação

A maneira mais fácil de instalar o matplotlib é usar o pip. Digite o seguinte comando no terminal:

OU, você pode baixá-lo aqui e instalá-lo manualmente.

Primeiros passos (traçando uma linha)

Saída:

  • Defina o eixo x e os valores correspondentes do eixo y como listas.
  • Trace-os na tela usando .enredo() função.
  • Dê um nome aos eixos xey usando .xlabel () e .ylabel () funções.
  • Dê um título ao seu enredo usando .título() função.
  • Finalmente, para visualizar o seu enredo, usamos .mostrar() função.

Plotando duas ou mais linhas no mesmo gráfico

  • Aqui, traçamos duas linhas no mesmo gráfico. Nós diferenciamos entre eles, dando-lhes um nome (etiqueta) que é passado como um argumento da função .plot ().
  • A pequena caixa retangular com informações sobre o tipo de linha e sua cor é chamada de legenda. Podemos adicionar uma lenda ao nosso enredo usando .lenda() função.

Customização de parcelas

Aqui, discutimos algumas personalizações elementares aplicáveis ​​em quase todos os enredos.

Saída:

Como você pode ver, fizemos várias personalizações, como

  • definindo a largura da linha, estilo da linha, cor da linha.
  • definindo o marcador, a cor do rosto do marcador e # 8217s, o tamanho do marcador e # 8217s.
  • substituindo o intervalo dos eixos xey. Se a substituição não for feita, o módulo pyplot usa o recurso de escala automática para definir o intervalo e a escala do eixo.
  • Aqui, usamos plt.bar () função para traçar um gráfico de barras.
  • As coordenadas x do lado esquerdo das barras são passadas juntamente com as alturas das barras.
  • você também pode dar algum nome às coordenadas do eixo x definindo tick_labels
  • Aqui, usamos plt.hist () função para traçar um histograma.
  • frequências são passadas como o idades Lista.
  • O intervalo pode ser definido definindo uma tupla contendo o valor mínimo e máximo.
  • A próxima etapa é & # 8220bin& # 8221 o intervalo de valores - ou seja, divida todo o intervalo de valores em uma série de intervalos - e depois conte quantos valores caem em cada intervalo. Aqui nós definimos caixotes do lixo = 10. Portanto, há um total de 100/10 = 10 intervalos.

Gráfico de dispersão

  • Aqui, usamos plt.scatter () função para traçar um gráfico de dispersão.
  • Como uma linha, definimos xe os valores correspondentes do eixo y & # 8211 aqui também.
  • marcador argumento é usado para definir o caractere a ser usado como marcador. Seu tamanho pode ser definido usando s parâmetro.

A saída do programa acima é semelhante a esta:

  • Aqui, traçamos um gráfico de pizza usando plt.pie () método.
  • Em primeiro lugar, definimos o rótulos usando uma lista chamada Atividades.
  • Então, parte de cada etiqueta pode ser definida usando outra lista chamada fatias.
  • A cor de cada etiqueta é definida usando uma lista chamada cores.
  • shadow = True mostrará uma sombra abaixo de cada rótulo no gráfico de pizza.
  • sobressalto gira o início do gráfico de pizza em determinados graus no sentido anti-horário a partir do eixo x.
  • explodir é usado para definir a fração do raio com a qual compensamos cada fatia.
  • autopct é usado para formatar o valor de cada rótulo. Aqui, nós o configuramos para mostrar o valor percentual apenas até 1 casa decimal.

Traçando curvas de dada equação

A saída do programa acima é semelhante a esta:

  • Para definir os valores do eixo x & # 8211, usamos np.arange () método em que os primeiros dois argumentos são para intervalo e o terceiro para incremento passo a passo. O resultado é uma matriz numpy.
  • Para obter os valores correspondentes do eixo y, simplesmente usamos np.sin () método na matriz numpy.
  • Finalmente, plotamos os pontos passando matrizes xey para o plt.plot () função.

Portanto, nesta parte, discutimos vários tipos de gráficos que podemos criar em matplotlib. Existem mais parcelas que não foram abordadas, mas as mais significativas são discutidas aqui & # 8211


Este artigo é uma contribuição de Nikhil Kumar. Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contrib.geeksforgeeks.org ou enviar seu artigo para [email protected] Veja seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.

Atenção geek! Fortaleça suas bases com o Python Programming Foundation Curso e aprenda o básico.

Para começar, os preparativos para a entrevista Aprimore seus conceitos de Estruturas de Dados com o Python DS Curso. E para começar sua jornada de aprendizado de máquina, junte-se ao Aprendizado de máquina e curso de nível básico # 8211


Camada de características (gerenciamento de dados)

A ferramenta Criar camada de feição é usada para criar uma camada de feição a partir de uma classe de feição de entrada ou arquivo de camada. A camada criada pela ferramenta é temporária e não persistirá após o término da sessão, a menos que o documento seja salvo.

Classes de recursos complexos, como anotação e cotas, não são suportados por esta ferramenta.

A camada de feição pode ser usada como entrada para qualquer ferramenta de geoprocessamento que aceite uma classe de feição como entrada.

A camada de feição temporária pode ser salva como um arquivo de camada usando a ferramenta Save To Layer File ou salva como uma nova classe de feição usando a ferramenta Copy Features.

Camadas criadas no ArcCatalog não podem ser usadas no ArcMap a menos que sejam salvas em um arquivo de camada usando a ferramenta Salvar em arquivo de camada.

Uma camada de feição existente será substituída se o mesmo nome de camada for especificado e se você declarar explicitamente que a substituição de saídas é permitida.

Você pode definir essa opção em qualquer aplicativo abrindo o menu Ferramentas e a caixa de diálogo Opções. Na guia Geoprocessamento sob o título Geral, você verá uma caixa de seleção para Substituir as saídas das operações de geoprocessamento.

Em um script, você precisará definir o método Overwrite Output como True.

Se uma expressão SQL for usada, mas não retornar nada, a camada de feição de saída ficará vazia.

Para obter mais detalhes sobre a sintaxe do parâmetro Expression, consulte Construindo uma Expressão SQL ou Referência SQL.

Os nomes dos campos podem receber um novo nome usando o controle de Informações do Campo. A segunda coluna no controle lista os nomes de campo existentes da entrada. Para renomear um campo, clique no nome do campo e digite um novo.

Os nomes dos campos serão validados especificando um espaço de trabalho de entrada. Portanto, se a entrada for uma classe de recurso de banco de dados geográfico e a área de trabalho de saída for uma pasta, os nomes dos campos podem ser truncados, pois os atributos do arquivo de forma só podem ter nomes de dez caracteres ou menos. Os novos nomes podem ser revisados ​​e alterados usando o controle de Informações de Campo.

Um subconjunto de campos pode se tornar visível na nova camada usando o controle de Informações do Campo. A terceira coluna no controle fornece uma opção suspensa para especificar se um campo ficará visível ou oculto na nova camada. O padrão é verdadeiro. Selecionar FALSE ocultará esse campo. Se a camada de feição for salva como uma nova classe de feição, apenas os campos listados como visíveis irão aparecer na nova saída.

Novos nomes de campo definidos em Make Feature Layer serão honrados nas ferramentas subsequentes. No entanto, se Make Feature Layer for a última ferramenta em um modelo, os nomes dos campos serão obtidos da classe de recurso de origem no disco. Para manter novos nomes de campo, a nova camada de feição deve ser escrita em uma nova classe de feição usando Copiar feições ou Classe de feição para classe de feição.

Uma política de divisão pode ser definida usando o controle de Informações do Campo. A quarta coluna no controle fornece uma opção suspensa para especificar uma política de divisão. O padrão é NENHUM. Isso significa que o atributo dos dois recursos resultantes assume uma cópia do valor de atributo do objeto original. Selecionar RATIO significa que os atributos dos recursos resultantes são uma proporção do valor do recurso original. A proporção é baseada na proporção em que a geometria original é dividida. Se a geometria for dividida igualmente, cada atributo do novo recurso obtém a metade do valor do atributo do objeto original.

Nenhuma configuração de ambiente afeta esta ferramenta.

A classe ou camada do recurso de entrada. Classes de recursos complexos, como anotação e dimensões, não são entradas válidas para esta ferramenta.

O nome da camada de feição a ser criada.

Uma expressão SQL usada para selecionar um subconjunto de recursos.

A sintaxe da expressão difere um pouco dependendo da fonte de dados. Por exemplo, se você estiver consultando arquivos ou bancos de dados geográficos ArcSDE, shapefiles ou coberturas, coloque os nomes dos campos entre aspas duplas:

Se você estiver consultando bancos de dados geográficos pessoais, coloque os campos entre colchetes:

Para obter mais informações sobre a sintaxe SQL e como ela difere entre as fontes de dados, consulte a Referência SQL.

A área de trabalho de entrada usada para validar os nomes dos campos. Se a entrada for uma classe de recurso de banco de dados geográfico e a área de trabalho de saída for uma pasta, os nomes dos campos podem ser truncados, uma vez que os atributos do arquivo de forma só podem ter nomes de dez caracteres ou menos. Os novos nomes podem ser revisados ​​e alterados usando o controle de Informações de Campo.

O controle de informações do campo é usado para revisar e alterar os nomes dos campos para a nova camada. Os campos podem ser ocultados e uma política de divisão pode ser especificada.

Exemplo de linha de comando

A classe ou camada do recurso de entrada. Classes de recursos complexos, como anotação e dimensões, não são entradas válidas para esta ferramenta.

O nome da camada de feição a ser criada.

Uma expressão SQL usada para selecionar um subconjunto de recursos.

A sintaxe da expressão difere um pouco dependendo da fonte de dados. Por exemplo, se você estiver consultando arquivos ou bancos de dados geográficos ArcSDE, shapefiles ou coberturas, coloque os nomes dos campos entre aspas duplas:

Se você estiver consultando bancos de dados geográficos pessoais, coloque os campos entre colchetes:

Para obter mais informações sobre a sintaxe SQL e como ela difere entre as fontes de dados, consulte a Referência SQL.

A área de trabalho de entrada usada para validar os nomes dos campos. Se a entrada for uma classe de recurso de banco de dados geográfico e a área de trabalho de saída for uma pasta, os nomes dos campos podem ser truncados, uma vez que os atributos do arquivo de forma só podem ter nomes de dez caracteres ou menos. Os novos nomes podem ser revisados ​​e alterados usando o controle de Informações de Campo.

O controle de informações do campo é usado para revisar e alterar os nomes dos campos para a nova camada. Os campos podem ser ocultados e uma política de divisão pode ser especificada.


Sobre a API Unreal Editor Python

O Python Editor Script Plugin expõe uma ampla gama de classes e funções que você pode usar para interagir com o Unreal Editor, os ativos em seu projeto e o conteúdo em seus níveis. Esta API está toda contida no módulo irreal. Para acessá-lo, importe este módulo no início de qualquer script Python executado no ambiente Python do Editor:

O módulo irreal expõe quase tudo o que é exposto de C ++ a Blueprints em seu ambiente Editor. Não é pré-gerado, ele reflete automaticamente tudo o que está disponível em Blueprints em seu Editor. Conforme você habilita novos plug-ins no Unreal Editor, qualquer coisa que esses plug-ins exponham ao Blueprints também se torna disponível em Python. O mesmo vale para qualquer código C ++ que você escreve em seu projeto e expõe a Blueprints.

A API Python faz todos os esforços para expor APIs Unreal nativas de uma forma que seja o mais amigável possível para os desenvolvedores Python. Por exemplo:

Tipos de dados simples são convertidos de forma transparente entre Python e tipos nativos sempre que necessário.
Quando você passa uma lista, conjunto ou dict do Python, ele é automaticamente convertido em um array, conjunto ou mapa Unreal. Quando você recupera uma lista, conjunto ou dict retornado por uma função API, na verdade está obtendo uma instância de uma classe Unreal, mas sua API é totalmente consistente com a lista, conjunto ou tipo de dicionário base do Python.

As classes Python mantêm a mesma hierarquia de herança dos tipos nativos que representam. Isso significa, por exemplo, que você pode usar as funções integradas do Python isinstance () e type () para testar se um objeto deriva ou corresponde a uma determinada classe.

A API tenta encontrar um bom equilíbrio entre as convenções de nomenclatura usadas no Unreal para C ++ e Blueprints por um lado e as convenções de nomenclatura Python por outro. Classes e objetos na API Python têm os mesmos nomes que em Blueprints. Normalmente é igual aos seus tipos nativos, omitindo o prefixo (por exemplo, U ou T). Nomes de funções e propriedades são expostos automaticamente como snake_case em minúsculas. Portanto, por exemplo, você normalmente chama funções como unreal.StaticMeshActor.get_actor_transform (). Os nomes dos valores de enumeração são expostos automaticamente como SNAKE_CASE em maiúsculas.

Todas as funções expostas podem aceitar parâmetros solicitados ou parâmetros nomeados em qualquer ordem. Por exemplo, as duas chamadas de função a seguir são exatamente equivalentes:

Referência API

Para obter detalhes sobre todas as classes e funções expostas pela API Unreal Python, consulte a Referência da API aqui:

A Referência da API não é uma lista completa de tudo que pode ser exposto ao Python por plug-ins. Se você instalou plug-ins adicionais que não estão incluídos na Referência da API e precisa ver como seus recursos de script são expostos ao Python, você pode gerar sua própria versão local da Referência da API que contém documentos para os plug-ins que você precisar. Para obter instruções, consulte o arquivo leia-me em Engine Plugins Experimental PythonScriptPlugin SphinxDocs na pasta de instalação do Unreal Engine.


  1. Se necessário, abra seu mapa TCG_Garden no ArcMap.
  2. No Índice, pressione Ctrl enquanto clica nos nomes das camadas para destacar todas as camadas, exceto GardenPlots.
  3. Clique com o botão direito em qualquer uma das camadas destacadas e escolha Remover.

Agora você tem um mapa apenas das parcelas do jardim. Você os publicará como recursos vetoriais (não blocos, como na lição anterior), que poderá então configurar com pop-ups em seu mapa da web.

Observe alguns campos de interesse: nome, plotagem, e-mail e mailto (uma versão especialmente formatada de e-mail). Esses serão os principais elementos de dados em sua camada operacional de detentores de parcela.

Mailto é uma versão expandida do endereço de e-mail que permite aos usuários clicar em um link em um site para enviar um e-mail sem primeiro ter que copiar o endereço e abrir um cliente de e-mail.

Resumo: Camada operacional dos detentores de parcelas da Horta Comunitária de Tequesquite.

Descrição: Este é um serviço de recurso apenas de consulta dos lotes e proprietários de lotes no Tequesquite Community Garden no Parque Brian Bonaminio em Riverside, Califórnia.

Os serviços de feições (especialmente os pequenos como este) geralmente não demoram tanto para serem processados ​​quanto o serviço de mapa do mosaico da lição anterior. Assim que o sistema informar que publicou com sucesso o serviço da feição, está feito. Você pode acessar sua conta organizacional do ArcGIS para continuar seu trabalho.


3 respostas 3

Você deve seguir o guia de estilo. Eu estava pensando que NewBlackjackGame era um nome estranho para uma classe, mas descobri que é uma função, portanto, new_blackjack_game. (Dito isso, acho que toda a lógica dessa função deve realmente estar no Jogo, veja abaixo.)

Não adianta ter um main que apenas chama uma outra função. Renomeie essa função para main ou chame a função diretamente se __name__ == "__main__":.

Você só precisa manter os valores das cartas de rosto em values_lookup, que deve ser um atributo de classe (é o mesmo para todas as cartas / baralhos). O valor da carta pode ser apenas um número inteiro para cartas que não sejam figuras, então você pode ditar. Obtenha o valor da carta ou use-o diretamente. Por exemplo:

Observe o uso de @property, que é uma maneira Pythônica de implementar os getters e setters usados ​​em outras linguagens. Em uso:

Como já foi dito, não codifique o nome do Player s. Se você mantiver o revendedor separado, você pode ter quantos outros quiser:

Acho que o principal problema é ter lógica em lugares estranhos. Eu sugeriria uma estrutura como a seguinte:

  • Cartão - contém o valor e naipe de um cartão individual
  • Baralho - contém as cartas e a lógica para embaralhar e distribuir
  • Mão - outra coleção de cartas, com a lógica de somar pontuações. A mão não precisa saber seu dono, a lógica de quais cartas da mão devem ser mostradas deve estar no jogador. Ele não deve acessar um deck global - implementar, por exemplo, def draw_from (self, deck):
  • Jogador - um jogador tem uma mão de cartas, a lógica de entrada (hit_or_stand, que deve incorporar a validação), as regras para mostrar as cartas, seus créditos e estatísticas, etc.
    • Dealer - uma subclasse de Jogador que contém a lógica de jogo do dealer e as diferentes regras para mostrar sua mão

    Mesmo dentro das classes existentes, sua lógica está em todo lugar. Considere esta implementação simplificada do Hand:

    Agora, há apenas um atributo que a instância de Mão precisa - as cartas que ela contém. Você não tem que fazer tudo em valor (você poderia ter _helper_function s "privadas"), mas não precisa recalcular um total ou manter uma lista separada de valores.


    DatagramHandler¶

    A classe DatagramHandler, localizada no módulo logging.handlers, herda de SocketHandler para dar suporte ao envio de mensagens de registro por soquetes UDP.

    aula logging.handlers. DatagramHandler ( hospedar, porta ) ¶

    Retorna uma nova instância da classe DatagramHandler destinada a se comunicar com uma máquina remota cujo endereço é fornecido por hospedar e porta.

    Alterado na versão 3.4: Se a porta for especificada como Nenhum, um soquete de domínio Unix é criado usando o valor no host - caso contrário, um soquete UDP é criado.

    Escolhe o dicionário de atributos do registro e o grava no soquete em formato binário. Se houver um erro com o soquete, silenciosamente descarta o pacote. Para separar o registro na extremidade receptora em um LogRecord, use a função makeLogRecord ().

    O método de fábrica de SocketHandler é aqui substituído para criar um soquete UDP (socket.SOCK_DGRAM).

    Envie uma string de bytes em conserva para um soquete. O formato da string de byte enviada é conforme descrito na documentação de SocketHandler.makePickle ().


    Apêndice: Como reconhecer a fala em idiomas diferentes do inglês

    Ao longo deste tutorial, reconhecemos a fala em inglês, que é o idioma padrão para cada método de reconhecimento _ * () do pacote SpeechRecognition. No entanto, é absolutamente possível reconhecer a fala em outras línguas e é bastante simples de realizar.

    Para reconhecer a fala em um idioma diferente, defina o argumento de palavra-chave do idioma do método reconhecer _ * () como uma string correspondente ao idioma desejado. A maioria dos métodos aceita uma tag de idioma BCP-47, como 'en-US' para inglês americano ou 'fr-FR' para francês. Por exemplo, o seguinte reconhece a fala francesa em um arquivo de áudio:

    Apenas os métodos a seguir aceitam um argumento de palavra-chave de idioma:

    • reconhecer_bing ()
    • reconhecer_google ()
    • reconhecer_google_cloud ()
    • reconhecer_ibm ()
    • reconhecer_finge ()

    Para descobrir quais tags de idioma são suportadas pela API que você está usando, você deve consultar a documentação correspondente. Uma lista de tags aceitas por reconhece_google () pode ser encontrada nesta resposta do Stack Overflow.

    Obtenha um short & amp doce Truque Python entregue em sua caixa de entrada a cada dois dias. Sem spam nunca. Cancele a assinatura a qualquer momento. Com curadoria da equipe Real Python.

    Cerca de David Amos

    David é matemático por formação, cientista de dados / desenvolvedor Python de profissão e viciado em café por opção.

    Cada tutorial no Real Python é criado por uma equipe de desenvolvedores para que atenda aos nossos padrões de alta qualidade. Os membros da equipe que trabalharam neste tutorial são:

    Mestre Habilidades de Python do mundo real Com acesso ilimitado ao Real Python

    Junte-se a nós e tenha acesso a centenas de tutoriais, cursos práticos em vídeo e uma comunidade de especialistas em Python:

    Mestre Habilidades de Python do mundo real
    Com acesso ilimitado ao Real Python

    Junte-se a nós e tenha acesso a centenas de tutoriais, cursos práticos em vídeo e uma comunidade de especialistas em Python:

    Política de comentários reais do Python: Os comentários mais úteis são aqueles escritos com o objetivo de aprender ou ajudar outros leitores - depois de ler todo o artigo e todos os comentários anteriores. Reclamações e insultos geralmente não fazem o corte aqui.

    Qual é a sua lição principal ou coisa favorita que você aprendeu? Como você vai colocar em prática suas novas habilidades? Deixe um comentário abaixo e deixe-nos saber.