Calcolo del campo data con la data odierna da datetime.date.today ()?


10

Sto lavorando su una parte dello strumento che utilizzerà arcpy.CalculateField_management per aggiungere la data corrente alla tabella degli attributi. Ho vagato in lungo e in largo sugli interwebs e non riesco a trovare la soluzione a questo problema.

Quando utilizzo questo codice, ottengo il valore "12:00:00 AM"

    input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
    today = datetime.date.today()
    dte = today.strftime('%m/%d/%Y')
    arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON")

Quando utilizzo questo codice, ottengo il valore "19/06/1905" dalla data odierna del "10/07/2014"

    input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
    today = datetime.date.today()
    dte = str(today)
    arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON")

Qualche idea su cosa sto facendo di sbagliato? Vorrei evitare di usare il cursore di aggiornamento, ma lo farò se è l'ultima opzione.


Sembra che la parte Python di questo codice funzioni correttamente intervalli della data. Ma penso che il problema sia nella parte Arcpy del codice. Prova "VB" invece di "PYTHON" e vedi se aggiorna il valore corretto nel campo.
F_Kellner,

Ciò non ha risolto il problema, ma ha avuto lo strano risultato di modificare il valore visualizzato in 12:00:54 AM.
fathom analytics

Risposte:


10

Un cursore di aggiornamento eseguirà il calcolatore di campo il 100% delle volte.

Devi scrivere questo come espressione:

import arcpy, datetime

fc = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
field = "DTCARXTRCT"
exp = '''def add_date():
  import time
  return time.strftime("%Y/%m/%d")'''

arcpy.CalculateField_management(fc, field, 'add_date()',
                                'PYTHON', exp)
print 'done'

datetime.date.today () non ha funzionato nel calcolatore di campo, è passato a strftime.

OPPURE, se vuoi farlo nel modo migliore in cui puoi inserire le tue variabili, usa un cursore:

import arcpy, datetime

fc = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
field = "DTCARXTRCT"
with arcpy.da.UpdateCursor(fc, [field]) as rows:
    for row in rows:
        rows.updateRow([datetime.date.today()])
print 'done'

Ho provato entrambi e funzionano alla grande. Grazie! In una nota a margine, non voglio usare il cursore di aggiornamento perché richiede di scrivere di più per qualcosa che dovrebbe essere relativamente semplice. È possibile che io sia nuovo su Python e non capisca l'utilità della funzione. A prima vista, usare uno strumento gp in pacchetto ha più senso per me che usare il cursore. Pensieri?
fathom analytics

2
Questo è completamente comprensibile. Anch'io temevo i cursori quando stavo iniziando con Python. Tuttavia, man mano che ti senti più a tuo agio con Python, penso che scoprirai che i cursori sono molto più flessibili. Inoltre, come ho detto nella mia risposta originale, i cursori hanno prestazioni molto migliori. Nella contea per la quale lavoravo, un consulente GIS aveva scritto una sceneggiatura per un processo molto lungo che utilizzava il calcolatore da campo molte volte e la sua esecuzione ha richiesto oltre 2 ore. Quando sono migliorato con Python, ho riscritto lo script e ho usato i cursori invece del campo calc ed è durato meno di 15 minuti.
Crmackey,

0

Prova a usare:

time.strftime("%Y/%m/%d")

Non sono sicuro di dove modificare il codice usando questa parte. Puoi modificare il tuo post per mostrare l'intero codice?
fathom analytics

questa riga è stata incorporata nella risposta sopra
detroit_hc
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.