這篇文章講述基於Python的處理空間數據的一些方法,後續會再補充。
目錄
1. 遊標
arcpy中游標在arcpy.da模中,共有3種遊標。
1.1 SearchCoursor
## 使用語法
cursor = arcpy.da.SearchCursor(輸入表,字段名稱列表[, 查詢條件,空間參考])
## 一些地理處理
XXXX
## 記得要刪除遊標的引用
del cursor
1.2 UpdateCursor
## 使用語法
cursor = arcpy.da.UpdateCursor(輸入表,字段名稱列表[, 查詢條件,空間參考]) //創建遊標對象
## 使用for遍歷要素
for row in cursor:
cursor.updateRow(更新的內容列表)
cursor.deleteRow() //注意:deleteRow()方法沒有參數
## 記得要刪除row引用和遊標引用
del row
del cursor
1.3 InsertCursor
## 使用語法:
cursor = arcpy.da.InsertCursor(輸入表,字段名稱列表) //創建遊標對象
for row in cursor:
cursor.insertRow(插入的內容列表)
## 記得要刪除引用
del row
del cursor
1.4 用with語句使用遊標
搜索InsertCursor
和更新UpdateCursor
遊標支持with語句。具體語法如下:
## SearchCursor的with語句使用方法:
with arcpy.da.SearchCurosr(輸入要素/輸入表,字段名稱列表) as cursor:
執行語句XXX
## UpdateCursor的with語句使用方法:
with arcpy.da.UpdateCurosr(輸入要素/輸入表,字段名稱列表) as cursor:
執行語句XXX
注意:使用with語句使用遊標,
末尾不需要del cursor語句
,因爲with語句能夠自動保證數據庫鎖的關閉和釋放。
1.5 查詢條件參數
在上述語法中的詢條件是用SQL語言寫的。對於不同類別的要素採用的語法格式不一樣:
- shapefile和filedatabase:要素類字段分隔符爲雙引號
""
;
'"字段名" = XXX'
- personaldatabase:要素字段分隔符爲
[]
;
'[字段名] = XXX'
- ArcSDE中要素類
沒有分隔符號
;
爲了保證要素字段的SQL語句使用符號準確性,採用 arcpy.AddFieldDelimiters(要素名, 要素字段名稱列表)
函數。
## 舉個例子
fieldname = "City"
delimfield = arcpy.AddFieldDelimiters(fc, fieldname)
cursor = arcpy.da.SearchCursor(fc, ["Name"], delimfield + " = 'Nanjing'")
2. 處理表和字段名
主要涉及到的語法如下:
## 確定表名在指定的工作空間中是否有效,表名稱中無效的字符將用 _ 代替。
arcpy.ValidateTableName(表名稱,{工作空間})
## 確定字段在指定的工作空間中是否有效,字段名稱中無效的字符將用 _ 代替。
arcpy.ValidateFieldName(字段名稱, {工作空間})
## 在指定的工作空間內通過在輸入的名稱後面追加數字以創建一個具有唯一性的名稱。
arcpy.CreateUniqueName(名稱, {工作空間})
## 返回一個字符串,字符串包括數據庫名稱、所有者名稱以及表名。
arcpy.parseTableName(要素, {工作空間})
## 返回一個字符串,字符串包括數據庫名稱、所有者名稱、表名以及字段名。
arcpy.parseFieldName(字段, {工作空間})
3. 處理文本文件
3.1 文本打開方式
f = open(文件路徑,打開方式)
3.2 根據索引獲取文件內容
- 具體語法:
## 不輸入索引值則默認輸入文件中的所有內容,以單一的字符串返回;
## 帶索引值則輸入索引值前的所有內容,下次再使用f.read(索引值)時將認爲前一次讀取的位置索引爲0。
f.read({索引})
- 舉個例子:
有一個文本文檔中內容爲 ‘Geographic’字符串,第一次使用f.read(3)則輸出爲’Geo’,第二次使用f.read(5)則輸出爲’graph’;
若想第二次讀取時仍舊從文本的第一個字符爲索引0開始,則可以使用seek(索引值)
來設置讀取起始位置。
## 再次讀取,從文本第一個字符開始讀:
seek(0) //重新設置讀取文件的位置爲0
f.read(5)
## 則輸出結果爲:"Geogr"
3.3 文件的其它用法
f.readline()
f.readlines()
f.write(待寫入的內容)
f.writelines(待寫入的內容)
## 還可以使用fileinput模塊
import fileinput
fp = fileinput.input(文件路徑) //創建一個fileinput對象
for line in fp: //使用for遍歷對象中的每行內容
XXXX
–原創文章,轉載必須註明出處–