我目前正在 ArcGIS 中的一个项目上工作,其中有一堆要素类,它们都包含一个日期字段,该字段表示要素类中的样本的采集日期。
我需要将每个要素类中的每个日期(字段类型是“日期”而不是字符串或整数)转换为一年中的某一天,然后将一年中的某一天添加到一个名为DOY.
日期采用mm/dd/yyyy格式,但没有前导零(7/4/15 而不是 07/04/15)。每个要素类中的示例日期字段名为或Date,但每个要素类仅包含其中一个字段。我所附的代码是我到目前为止所拥有的。Sample_DatT0_Date
注意:在这 3 种情况下,它都arcpy.calculateField_management应该与rows.updateRows上面的一致,但是当我将代码复制到这个网站时出现了我无法修复的格式问题。
编辑:每当我尝试运行此代码时,它什么都不做,也不会将一年中的日期添加到 DOY 字段中。此外,它不会给出红色 X 或绿色复选标记,而是会给出一个黄色三角形表示警告,这是因为大约 80% 的要素类已经有一个“DOY”字段,但我将 addfield_management 部分包含在开始占没有 DOY 字段的 20%。我认为通过添加 elif 语句,它不会发出警告信号,而是只会循环,直到达到相关语句。
import arcpy
import datetime
fcList = arcpy.ListFeatureClasses()
for fc in fcList:
if "DOY" not in arcpy.ListFields(fc):
arcpy.AddField_management(fc,"DOY","SHORT")
elif "DOY" in arcpy.ListFields(fc) and "Date" in arcpy.ListFields(fc):
with arcpy.da.UpdateCursor(fc, "Date") as rows:
for row in rows:
rows.updateRow([datetime.datetime.strptime(row, '%m/%d/%Y')])
arcpy.CalculateField_management(fc,"DOY",row.timetuple().tm_yday)
elif "DOY" in arcpy.ListFields(fc) and "Sample_Dat" in arcpy.ListFields(fc):
with arcpy.da.UpdateCursor(fc,"Sample_Dat") as rows:
for row in rows :
rows.updateRow([datetime.datetime.strptime(row, '%m/%d/%Y')])
arcpy.CalculateField_management(fc,"DOY",row.timetuple().tm_yday)
elif "DOY" in arcpy.ListFields(fc) and "T0_Date" in arcpy.ListFields(fc):
with arcpy.da.UpdateCursor(fc,"T0_Date") as rows:
for row in rows:
rows.updateRow([datetime.datetime.strptime(row, '%m/%d,%Y')])
arcpy.CalculateField_management(fc,"DOY",row.timetuple().tm_yday)
else:
pass