กำลังคำนวณเขตข้อมูลวันที่ด้วยวันที่วันนี้จาก datetime.date.today ()?


10

ฉันกำลังทำงานในส่วนของเครื่องมือที่จะใช้ arcpy.CalculateField_management เพื่อเพิ่มวันที่ปัจจุบันลงในตารางที่เกี่ยวข้อง ฉันเดินข้าม interwebs ไปทั่วและดูเหมือนจะไม่สามารถแก้ไขปัญหานี้ได้

เมื่อใช้รหัสนี้ฉันจะได้รับค่า "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")

เมื่อใช้รหัสนี้ฉันจะได้รับค่า "06/19/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 AM
การวิเคราะห์หยั่งถึง

คำตอบ:


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'

ฉันทดสอบทั้งสองอย่างนี้แล้วก็ใช้งานได้ดี ขอบคุณ! ในบันทึกด้านข้างฉันไม่ต้องการใช้เคอร์เซอร์อัปเดตเนื่องจากต้องการการเขียนเพิ่มเติมสำหรับสิ่งที่ควรจะค่อนข้างง่าย อาจเป็นได้ว่าฉันใหม่กับ python และไม่เข้าใจถึงประโยชน์ของฟังก์ชั่น บนใบหน้าของมันโดยใช้เครื่องมือ gp แบบแพคเกจทำให้ฉันมีความรู้สึกมากกว่าการใช้เคอร์เซอร์ คิด?
การวิเคราะห์

2
นั่นเป็นที่เข้าใจได้อย่างสมบูรณ์ ฉันก็กลัวเคอร์เซอร์เช่นกันเมื่อฉันเริ่มใช้ Python เป็นครั้งแรก อย่างไรก็ตามเมื่อคุณคุ้นเคยกับ Python ฉันคิดว่าคุณจะพบว่าเคอร์เซอร์มีความยืดหยุ่นมากกว่า นอกจากนี้ตามที่ฉันพูดถึงในคำตอบเดิมเคอร์เซอร์มีประสิทธิภาพที่ดีกว่ามาก ที่เขตที่ฉันเคยทำงานให้คำปรึกษาด้าน GIS ได้เขียนสคริปต์สำหรับกระบวนการที่ยาวมากซึ่งใช้เครื่องคำนวณภาคสนามหลายครั้งและใช้เวลา 2 ชั่วโมงกว่าจะทำงานได้ เมื่อฉันดีขึ้นด้วย Python ฉันจะเขียนสคริปต์ใหม่และใช้เคอร์เซอร์แทนการคำนวณแบบฟิลด์และใช้เวลาไม่ถึง 15 นาที
crmackey

0

ลองใช้:

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

ไม่แน่ใจว่าจะแก้ไขรหัสโดยใช้ส่วนนี้ได้ที่ไหน คุณสามารถแก้ไขโพสต์เพื่อแสดงรหัสทั้งหมดได้หรือไม่
การวิเคราะห์หยั่งถึง

บรรทัดนี้รวมอยู่ในคำตอบข้างต้น
detroit_hc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.