Více

Importujete aktualizované hodnoty CSV do polí třídy prvků?

Importujete aktualizované hodnoty CSV do polí třídy prvků?


Nějakou dobu zpět jsem měl požadavek vyvinout automatizovanou metodu (Python) pro aktualizaci hodnot pole pro datovou sadu prostorových bodů v databázi Oracle 11g SDE (exportována do GDB pro testování). Im using Win 7, ArcGIS 10.2, Python 2.7.5. Požadavkem bylo vytvořit výběr duplicitních záznamů a distribuovat export do jiných kanceláří, aby příjemci označili řádky jako KEEP nebo RETIRE a vrátili mi výpis (csv).

Myšlenka byla, že bych pak mohl použít csv.dictreader k importu výsledků ze 2 požadovaných sloupců ('book_id' a 'book_ref') v csv, přičemž jsem ponechal pouze výsledky, které splňovaly kritéria = 'KEEP'. Pak jsem chtěl předat tyto výsledky mé třídě funkcí s dalším zdokonalením pouze aktualizací stávajících hodnot, kde číslo souboru CSV 'book_id' odpovídalo třídě funkcí 'book_id'.

Nakonec jsem úkol provedl ručně, protože jsem nemohl získat výsledek z kódu, přestože jsem zkoumal sekci nápovědy ArcGIS, stovky a stovky příspěvků na tomto webu, geonet, arcpy cafe atd. Atd.

Nakonec však Dláždil jsem dohromady dost bitů, aby to fungovalo oustide of work then thought I will post the solution in case others have similar needs.


Obsah souboru 123.csf; book_id TYPE book_ref Status POINT_X POINT_Y 2397 3 3645 Keep 9526430.185 4363958.707 9644 12 2584 Keep 9526427.129 4363961.326 9295 4 4427 odejít 9526421.019 4363963.072 4406 3 3333 Keep 9526461.894 4363968.266 1798 4 1832 odejít 9526461.457 4363974.813 7643 4 1594 Keep 9526407.489 4363966.127 6778 3 8582 odejít 9526412.29 4363968.746 2252 3 3574 Zachovat 9526367.183 4363972.194 7910 4 5648 Vyřadit 9526402.746 4363934.921 7588 3 9873 Zachovat 9526401.436 4363928.375 # importovat moduly import arcpy, csv # Nastavit prostředí pracovního prostoru arcpy.env.workspace = "C: / Data / Code / Python / Library / Peter / MAST gdb "ws = arcpy.env.workspace arcpy.env.overwriteOutput = True print" Env.workspace nastaven na: '"+ ws +"' "' n' #feature class in_fc1 =" C: / Data / Code / Python / Knihovna / Peter / MASTER_02.gdb / ZONES / Police "tisk" Feat_Class: "+ str (in_fc1) +"  n "# Co je třeba udělat, začíná zde ... Att_Dict = {} s otevřeným (" C: / Data / Kód / Python " /Library/Peter/123.csv ") jako f: reader = csv.DictReader (f) pro řádek ve čtenáři: if row ['Statu s '] ==' Zachovat ': Att_Dict.update ({řádek [' book_id ']: řádek [' book_ref ']}) print "Att_Dict:" + str (Att_Dict) + " n" # Správně importuje hodnoty jako „Att_Dict“, kterým jsem od 123.csv = ... # {'7643': '7625', '2397': '1835', '7588': '9681', '9644': '2289', '4406 ':' 4443 ',' 2252 ':' 7947 '} Att_List = [] pro klíč, hodnota v Att_Dict.items (): Att_List.append ([int (klíč), int (hodnota)]) tisk "Att_List:" + str (Att_List) + " n" # Správně přeformátuje hodnoty Att_Dict jako Att_List pro aktualizaci… # [[7643, 7625], [2397, 1835], [7588, 9681], [9644, 2289], [4406, 4443], [2252, 7947]] pro pár v Att_List: Att_Dict [pair [0]] = pair [1] fn1 = 'book_id' # název pole 1 fn2 = 'book_ref' # název pole 2 pole1 = [fn1, fn2 ] # formát pracuje s da.UpdateCursor s arcpy.da.UpdateCursor (in_fc1, fields1) jako kurzor: pro řádek v kurzoru: pos_1 = řádek [0] # pos_1 odpovídá záznamu ve sloupci [0] ('book_id') ve sloupci fc "Police", pokud pos_1 v Att_Dict: # pokud sloupec záznamu řádku [0] ('book_id') existuje také ve sloupci Att_Dict, řádek [1] = v t_Dict [pos_1] # získat odpovídající řádek [1] hodnotu „book_ref“ a přepsat řádek ve fc „Shelves“ cursor.updateRow (řádek) # provést aktualizaci # Smazat objekty kurzoru a řádku a odstranit zámky na řádku dat del, kurzor # a končí zde ...

Kód je kopírování a vkládání, nikoli přepisování, takže nic nechybí a právě teď to fungovalo s mými proměnnými. A co je nejdůležitější, splňuje mé požadavky, i když po akci. Nemusí to být ten nejelegantnější kód, ale funguje to a možná z něj mohou ostatní získat nějakou hodnotu.

UPRAVIT

Pokud pracujete v SDE, zjistil jsem, že musím přidat relaci úprav. # Co je třeba udělat, začíná zde ... Att_Dict = {}

Upravil jsem na

# Zde je třeba začít dělat ... # Zahájit relaci úprav. Musí poskytnout pracovní cestu. edit = arcpy.da.Editor (ws) # Relační relace je spuštěna bez zásobníku zpět / znovu pro verze dat # (pro druhý argument použijte False pro data bez verze) edit.startEditing (False, False) # Zahájení operace úprav edit .startOperation () Att_Dict = {}

a to před # A končí zde ...

# Smažte objekty kurzoru a řádku, abyste odstranili zámky na řádku s odstraněním dat, kurzor # Zastavte operaci úprav. edit.stopOperation () # Zastavte relaci úprav a uložte změny edit.stopEditing (True) # A končí zde ...

Podívejte se na video: لحظة التكريم الملكي للمعلم المتميز أحمد جادالله