Вычисление поля даты с сегодняшней датой от datetime.date.today ()?

10

Я работаю над частью инструмента, которая будет использовать arcpy.CalculateField_management, чтобы добавить текущую дату в таблицу атрибутов. Я бродил повсюду и не могу найти решение этой проблемы.

При использовании этого кода я получаю значение «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")

При использовании этого кода я получаю значение «19.06.1905» от сегодняшней даты «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")

Есть мысли о том, что я делаю не так? Я хотел бы избежать использования курсора обновления, но сделаю это, если это последний вариант.

глубокая аналитика
источник
Похоже, что Python-часть этого кода работает правильно в промежутках между датой. Но я думаю, что проблема в Arcpy части кода. Попробуйте «VB» вместо «PYTHON» и посмотрите, обновляет ли это правильное значение в поле.
F_Kellner
Это не решило проблему, но привело к странному результату изменения отображаемого значения на 12:00:54.
понять аналитику

Ответы:

10

Обновление курсора будет выполнять калькулятор поля 100% времени.

Вы должны написать это как выражение:

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 () не работал в полевом калькуляторе, переключился на strftime.

ИЛИ, если вы хотите сделать это лучше, когда вы можете вводить свои собственные переменные, используйте курсор:

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'
crmackey
источник
Я проверил оба из них, и они прекрасно работают. Спасибо! Кстати, я не хочу использовать курсор обновления, потому что он требует больше записи для чего-то, что должно быть относительно простым. Может быть, я новичок в Python и не понимаю полезности функции. На первый взгляд, использование упакованного gp-инструмента имеет для меня больше смысла, чем использование курсора. Мысли?
понять аналитику
2
Это совершенно понятно. Я тоже боялся курсоров, когда только начинал работать с Python. Тем не менее, когда вы освоитесь с Python, я думаю, вы найдете гораздо более гибкие курсоры. Кроме того, как я уже упоминал в своем первоначальном ответе, курсоры имеют гораздо лучшую производительность. В округе, в котором я работал, консультант ГИС написал сценарий для очень длительного процесса, в котором много раз использовался полевой калькулятор, и его запуск занял более 2 часов. Когда мне стало лучше с Python, я переписал скрипт и использовал курсоры вместо поля calc, и он работал менее чем за 15 минут.
crmackey
0

Попробуйте использовать:

time.strftime("%Y/%m/%d")
detroit_hc
источник
Не уверен, где изменить код, используя эту часть. Можете ли вы отредактировать свой пост, чтобы показать весь код?
понять аналитику
эта строка была включена в ответ выше
detroit_hc