Calculando Data Campo com a data de hoje de datetime.date.today ()?


10

Estou trabalhando em parte da ferramenta que usará arcpy.CalculateField_management para adicionar a data atual à tabela de atributos. Eu vaguei por toda parte nas interwebs e parece que não consigo encontrar a solução para esse problema.

Ao usar esse código, recebo o valor "12:00:00"

    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")

Ao usar esse código, recebo o valor "19/06/1905" a partir da data de hoje de "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")

Alguma idéia do que estou fazendo de errado? Eu gostaria de evitar o uso do cursor de atualização, mas o fará se for a última opção.


Parece que a parte Python deste código está funcionando corretamente entre a data. Mas acho que o problema está na parte do código do Arcpy. Tente "VB" em vez de "PYTHON" e veja se isso atualiza o valor correto no campo.
F_Kellner

Isso não resolveu o problema, mas teve o resultado estranho de alterar o valor exibido para 12:00:54.
fathom analytics

Respostas:


10

Um Cursor de atualização executará a calculadora de campo 100% do tempo.

Você precisa escrever isso como uma expressão:

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 () não funcionou na calculadora de campo, mudou para strftime.

OU, se você quiser fazê-lo da melhor maneira em que você pode alimentar suas próprias variáveis, use um cursor:

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'

Eu testei esses dois e eles funcionam muito bem. Obrigado! Em uma nota lateral, não quero usar o cursor de atualização, pois requer escrever mais para algo que deve ser relativamente simples. Pode ser que eu seja novo no python e não entendo a utilidade da função. Aparentemente, usar uma ferramenta gp empacotada faz mais sentido para mim do que usar o cursor. Pensamentos?
fathom analytics

2
Isso é completamente compreensível. Eu também temia os cursores quando comecei a usar o Python. No entanto, à medida que você se sente mais confortável com o Python, acho que os cursores são muito mais flexíveis. Além disso, como mencionei na minha resposta original, os cursores têm desempenho muito melhor. No município em que eu trabalhava, um consultor de GIS havia escrito um script para um processo muito longo que usava a calculadora de campo muitas vezes e isso levava mais de duas horas para ser executado. Quando melhorei com o Python, reescrevi o script e usei cursores em vez do campo calc e ele foi executado em menos de 15 minutos.
crmackey

0

Tente usar:

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

Não sabe onde modificar o código usando esta parte. Você pode editar sua postagem para mostrar o código inteiro?
fathom analytics

esta linha foi incorporada na resposta acima
detroit_hc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.