Riuscire ArcGIS a includere gli zeri iniziali nel campo di testo?


9

Sto inserendo caratteri in un campo di testo che è essenzialmente un ID di 5 numeri. Ho bisogno di includere gli zeri iniziali nel valore, ma ogni volta che accedo o calcolo il campo, gli zeri iniziali vengono rimossi (anche se le proprietà del campo indicano che si tratta di un campo di testo di 5 caratteri).

Come forzare il campo a includere zeri iniziali?

Risposte:


12

Python ha un built-in per i principali zeri. Utilizzare str.zfill()per aggiungere zeri iniziali in un campo di testo.

my_string = "1"
print my_string.zfill(2)   # Prints 01

my_string = "1000"
print my_string.zfill(2)   # Prints 1000

(esempio da https://stackoverflow.com/a/21620624/5754917 )

Quindi nel calcolatore di campo devi solo specificare il nome del campo con il tuo ID e quindi riempire con zeri

str(!myfield!).zfill(5)

inserisci qui la descrizione dell'immagine

E il risultato finale:

inserisci qui la descrizione dell'immagine

Ricorda di impostare il calcolatore di campo su "Python Parser"


OK, sembra molto semplice. Lo proverò! Grazie.
CJSF

Tutto a posto! Questo è esattamente ciò di cui avevo bisogno ed era così facile, sono quasi imbarazzato! Grazie mille!
CJSF

3

Inserisci il testo tra virgolette. Virgolette doppie se si è in modalità VB Script e doppie o singole se in modalità Python.

Per spiegare: quando inserisci semplicemente i numeri, dai al Field Calculator un valore in forma intera, che verrà convertito in una stringa per te per inserirlo nel campo del tipo di stringa. Per gli interi, gli zeri iniziali non hanno valore né significato, quindi vengono omessi. Se lo metti tra virgolette, gli stai invece passando una stringa, che è già il tipo di dati corretto, quindi viene lasciato solo.

Ciò presuppone anche che questo campo sia effettivamente di tipo "Testo". Forse era impostato su Intero lungo o corto, che avrebbe causato anche questo comportamento.


Grazie, immagino funzionerà anche questo. Ma alla fine dovrò prendere il valore senza gli zeri iniziali da parte di un altro campo come parte di un processo semi-automatico più ampio.
CJSF

Se riesci a modificare la tua domanda e aggiungere qualche dettaglio in più e l'intero codice che hai attualmente, potremmo probabilmente aiutarti meglio. Sembrava che stessi scrivendo manualmente i valori in un gruppo di righe.
PhilippNagel,

2

Puoi usare un blocco di codice Python .

Aggiungi questa definizione di funzione nel blocco di codice:

def addZero(value):
    if value <= 9:
        output = '0000' + str(value)
    elif value <= 99:
        output = '000' + str(value)
    elif value <= 999:
        output = '00' + str(value)
    elif value <= 9999:
        output = '0' + str(value)
    return output

Puoi usarlo come:

addZero(!Field!) # numeric field

o

addZero(123) # for example

Ti consigliamo di definire le definizioni <= per i limiti superiori :)
MaryBeth

@ MaryBeth sì, colpa mia. A cura di
aldo_tapia il

2

Come menzionato nelle altre risposte, è necessario assicurarsi che i numeri siano convertiti in stringhe.

Se perdi i tuoi 0 o li hai in un campo numerico, crea una colonna di stringa di larghezza 5, digita semplicemente il seguente comando Python:

str(!MYFIELD!).zfill(5)

Di proprietà di @Midavalo! Ero troppo lento: D
gisnside il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.