Розрахунок поля дати з сьогоднішньою датою від datetime.date.today ()?


10

Я працюю над частиною інструменту, який буде використовувати arcpy.CalculateField_management, щоб додати поточну дату до таблиці attribut. Я блукав далеко і вшир по інтерв'ю і, здається, не знаходжу вирішення цього питання.

Під час використання цього коду я отримую значення "00: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" від сьогоднішньої дати "07.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

Це не вирішило проблему, але мав незвичайний результат зміни значення, виведеного на 00:00:54.
fathom analytics

Відповіді:


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 () не працював у калькуляторі поля, перейшов на строповий.

АБО, якщо ви хочете зробити це кращим способом, де можна подавати власні змінні, скористайтеся курсором:

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'

Я тестував і те, і вони чудово працюють. Дякую! Зі сторони, я не хочу використовувати курсор оновлення, оскільки він вимагає написання більше для чогось, що має бути відносно простим. Можливо, я новачок у python і не розумію корисності функції. З іншого боку, використання пакетованого інструменту gp має для мене більше сенсу, ніж використання курсору. Думки?
fathom analytics

2
Це цілком зрозуміло. Я теж побоювався курсорів, коли вперше почав працювати з Python. Однак, коли вам зручніше з Python, я думаю, що ви знайдете курсори набагато гнучкішими. Крім того, як я вже згадував у своїй оригінальній відповіді, курсори мають значно кращі показники. У повіті, в якому я працював, консультант ГІС написав сценарій дуже тривалого процесу, який багато разів використовував польовий калькулятор, і на це зайняло понад 2 години. Коли мені стало краще з Python, я переписав сценарій і використав курсори замість calc поля, і він пробіг менше 15 хв.
crmackey

0

Спробуйте використовувати:

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

Не знаєте, де змінити код за допомогою цієї частини. Чи можете ви відредагувати свою публікацію, щоб показати весь код?
fathom analytics

цей рядок був включений у відповідь вище
detroit_hc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.