遍历数组并将字符串用作属性名称的正确方法?
Correct method to iterate through an array and apply string as an attribute name?
我有一个包含大量列和行的 .csv。我使用 python 读取 csv 并在 ArcGIS 中创建 table/feature class 并使用 .csv 中的行填充 table。我正在寻找以下的最佳 way/shorthand 方法:
我有一个代表 .csv“csv_headers”第一行的列表。
下面的 CSV 简短示例显示列表为:
csv_headings = ['Key', 'X', 'Y', 'Value1', 'Value2'...]
Key X Y Value1 Value2 ...
2221 192934 875767 96.4 95.4
2222 194459 834763 96.3 99.9
2223 193934 905606 90.6 95.1
2224 191974 855100 91.0 95.2
...
目前以下用于填充 ArcGIS 中的 table/feature class:
with open("C:\path_to_csv.csv", 'rb') as f:
reader = csv.DictReader(f)
for row in reader:
# Create the feature
feature = cursor.newRow()
# Add the point geometry to the feature
vertex = arcpy.CreateObject("Point")
vertex.X = row['X']
vertex.Y = row['Y']
feature.shape = vertex
# Add attributes
feature.Key = row['Key']
feature.X = row['X']
feature.Y = row['Y']
feature.Value1 = row['Value1']
feature.Value2 = row['Value2']
我的完整数据集有 43 列,目前全部手动编写为“feature.ValueX = 行['ValueX'] 43 行,我希望缩短。
基本上我想遍历“csv_headers”作为 x 并将 x 应用为属性名称和行标题,假设:
# Add attributes
for x in csv_headers:
feature.x = row[x]
但这行不通,只是想知道解决这个问题的正确方法是什么?任何帮助将不胜感激。
简短的回答是:
for attr in csv_headings:
setattr(feature, attr, row[attr])
并且 setattr
文档是 here。
我有一个包含大量列和行的 .csv。我使用 python 读取 csv 并在 ArcGIS 中创建 table/feature class 并使用 .csv 中的行填充 table。我正在寻找以下的最佳 way/shorthand 方法:
我有一个代表 .csv“csv_headers”第一行的列表。
下面的 CSV 简短示例显示列表为:
csv_headings = ['Key', 'X', 'Y', 'Value1', 'Value2'...]
Key X Y Value1 Value2 ...
2221 192934 875767 96.4 95.4
2222 194459 834763 96.3 99.9
2223 193934 905606 90.6 95.1
2224 191974 855100 91.0 95.2
...
目前以下用于填充 ArcGIS 中的 table/feature class:
with open("C:\path_to_csv.csv", 'rb') as f:
reader = csv.DictReader(f)
for row in reader:
# Create the feature
feature = cursor.newRow()
# Add the point geometry to the feature
vertex = arcpy.CreateObject("Point")
vertex.X = row['X']
vertex.Y = row['Y']
feature.shape = vertex
# Add attributes
feature.Key = row['Key']
feature.X = row['X']
feature.Y = row['Y']
feature.Value1 = row['Value1']
feature.Value2 = row['Value2']
我的完整数据集有 43 列,目前全部手动编写为“feature.ValueX = 行['ValueX'] 43 行,我希望缩短。
基本上我想遍历“csv_headers”作为 x 并将 x 应用为属性名称和行标题,假设:
# Add attributes
for x in csv_headers:
feature.x = row[x]
但这行不通,只是想知道解决这个问题的正确方法是什么?任何帮助将不胜感激。
简短的回答是:
for attr in csv_headings:
setattr(feature, attr, row[attr])
并且 setattr
文档是 here。