Obliczanie pola daty z dzisiejszą datą z datetime.date.today ()?


10

Pracuję nad częścią narzędzia, które użyje arcpy.CalculateField_management, aby dodać bieżącą datę do tabeli atrybutów. Wędrowałem daleko w różnych interwebach i nie mogę znaleźć rozwiązania tego problemu.

Podczas korzystania z tego kodu otrzymuję wartość „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")

Korzystając z tego kodu, otrzymuję wartość „19.06.1905” od dzisiejszej daty „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")

Masz jakieś przemyślenia na temat tego, co robię źle? Chciałbym uniknąć używania kursora aktualizacji, ale zrobi to, jeśli jest to ostatnia opcja.


Wygląda na to, że część tego kodu w Pythonie działa poprawnie w interwałach daty. Ale myślę, że problem dotyczy części kodu Arcpy. Spróbuj „VB” zamiast „PYTHON” i sprawdź, czy to aktualizuje poprawną wartość w polu.
F_Kellner,

Nie rozwiązało to problemu, ale miało dziwny skutek zmiany wyświetlanej wartości na 12:00:54.
fathom analytics

Odpowiedzi:


10

Aktualizacja Kursor wykona kalkulator polowy przez 100% czasu.

Musisz napisać to jako wyrażenie:

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 () nie działał w kalkulatorze polowym, zmieniono na strftime.

LUB, jeśli chcesz to zrobić w lepszy sposób, w którym możesz wprowadzić własne zmienne, użyj kursora:

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'

Przetestowałem oba te i działają świetnie. Dzięki! Na marginesie, nie chcę używać kursora aktualizacji, ponieważ wymaga więcej pisania dla czegoś, co powinno być stosunkowo proste. Możliwe, że jestem nowym użytkownikiem Pythona i nie rozumiem przydatności tej funkcji. Na pierwszy rzut oka użycie pakowanego narzędzia gp ma dla mnie większy sens niż używanie kursora. Myśli?
fathom analytics

2
To jest całkowicie zrozumiałe. Ja również obawiałem się kursorów, kiedy zaczynałem pracę z Pythonem. Jednak, gdy poczujesz się bardziej komfortowo z Pythonem, myślę, że zauważysz, że kursory są znacznie bardziej elastyczne. Ponadto, jak wspomniałem w mojej oryginalnej odpowiedzi, kursory mają znacznie lepszą wydajność. W hrabstwie, w którym kiedyś pracowałem, konsultant GIS napisał skrypt dla bardzo długiego procesu, który wielokrotnie korzystał z kalkulatora terenowego, a jego uruchomienie zajęło ponad 2 godziny. Kiedy poprawiłem się w Pythonie, przepisałem skrypt i użyłem kursorów zamiast kalkulatora polowego i działał on w ciągu 15 minut.
crmackey,

0

Spróbuj użyć:

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

Nie wiem, gdzie zmodyfikować kod za pomocą tej części. Czy możesz edytować swój post, aby wyświetlić cały kod?
fathom analytics

wiersz ten został włączony do powyższej odpowiedzi
detroit_hc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.