Več

Želite prenesti eno ime polja iz besedilne datoteke v novo ime polja v razredu lastnosti?

Želite prenesti eno ime polja iz besedilne datoteke v novo ime polja v razredu lastnosti?


Delam na scenariju, ki vključuje požarne dogodke. Svoje vrednosti jemljem iz besedilne datoteke, ki je ločena z vejicami. Prva vrstica besedilne datoteke vsebuje imena polj (zemljepisna širina, dolžina, zaupanje). Moj cilj je ustvariti nov razred lastnosti, ki bo vzel zadnje ime polja iz moje besedilne datoteke (npr. Zaupanje) in ga uporabil kot ime polja v novem razredu lastnosti. Uspelo mi je, da je arcgis prebral ime zadnjega polja iz moje besedilne datoteke, tako da je ustvarjen nov razred lastnosti z imeni polj: "ID, SHAPE, Confidence", vendar je moj razred lastnosti prazen- zdi se mi, da je za zanke ustavite po branju prve vrstice. Verjamem, da imam prave komponente, samo nisem prepričan, v kakšnem vrstnem redu naj jih postavim. Del, ki me najbolj zmoti, je, da začnem brati besedilno datoteko v zanki for (kar se mi zdi precej normalno) in moj instinkt je, da razdelim to besedilno datoteko in z indeksiranjem pokažem na ime zadnjega polja "Zaupanje" z uporabo spremenljivke. Ko to storim, nisem prepričan, kako naj moj kazalec za vstavljanje in orodje za dodajanje polj (ki sta zunaj zanke for) prepoznajo to spremenljivko, ki kaže na "Zaupanje". Kakšen predlog?

Spodaj je moja koda:

import arcpy work = r "C:  Users  Cara  Documents  WildlandFires.mdb" arcpy.env.workspace = work arcpy.env.overwriteOutput = True iFile = r "C:  Users  Cara  Documents  NorthAmericaWildfires_2007275.txt" z odprto (iFile, 'r') kot f: lstFires = f.readlines () #novo ime razreda lastnosti newFC = fireIncidents fc = newFC #uporabniški vnos minimalni prag zaupanja zaupanjeThreshold = 99 minThresh = int (trustThreshold) lstFires = f.readlines () #Create New Feature Class arcpy.CreateFeatureclass_management (delo, fc, "POINT", "", "", "", "", "", "", "", "") #Loop skozi datoteko po vrsticah in zapolnite nove vrstice v razredu elementov #Create Insert Cursor za uporabo za vstavljanje novih vrstic v polja razreda lastnosti = ["[email protected]", fieldName] cur = arcpy.da.InsertCursor (fc, fields) #add field arcpy.AddField_management (fc , fieldName, "SHORT") natisni "ustvarjena polja" cntr = 0 #spremenljivka števca, ki se uporablja za tiskanje napredka skripta za požar v lstFires: če je 'Latitude' v ognju: #vrstica za branje, uporabite funkcijo deljenja fn = fire.split ( ",") fieldName = fn [2] nadaljevanje lstValues ​​= fire.split (",") # razdeljene vrednosti v ločene vrednosti, če je int (lstValues ​​[2])> minThresh: # če je vrednost zaupanja večja od vrednosti zaupanja, ki jo določi uporabnik, nadaljujte s kodo # ustvarite točkovni objekt, ki bo vseboval koordinate x, y ognja pnt = arcpy.CreateObject ("Point") #izvlecite posamezne vrednosti z uporabo indeksiranja seznama latitude = float (lstValues ​​[0]) longitude = float (lstValues ​​[1]) confid = int (lstValues ​​[2]) print "Lahko izvlečem vrednosti" cntr = cntr + 1 #dodeli x, y lastnosti predmeta Point na dolge in lat vrednosti pnt.X = dolžina pnt.Y = zemljepisna širina #Ustvari novo vrstico za funkcijo class #dodeljuje nov objekt Point v polje "SHAPE" in vrednost zaupanja v polje "CONFIDENCEVALUE" vrstica = [pnt, confid] natisni "vrstica je v redu" #Vstavi novo vrstico v razred lastnosti element cur.insertRow (vrstica) natisni "Record #" + str (cntr) + "zapisano v razred lastnosti" #sprostite zaklepanje kurzorja na razredu funkcij del cur

Ali ste prepričani, da so vaše vrednosti zaupanja shranjene kot črke in ne plavajoče?

Ta vrstica vaše kode:

če je int (lstValues ​​[2])> minThresh:

bo vedno vrnilo False, če so vrednosti zaupanja, shranjene v vaši besedilni datoteki, shranjene kot številke med 0,0 in 1,0, kar je običajno način poročanja vrednosti zaupanja. Poskusite zamenjati to vrstico s to vrstico, da vidite, ali pomaga.

if float (lstValues ​​[2])> minThresh:

Prav tako, popolnoma brez teme, boste morda želeli spremeniti svojo sintakso za branje besedilne datoteke na naslednjo:

z odprto (iFile, 'r') kot f: lstFires = f.readlines ()

Ta skladnja je čistejša in ni vam treba skrbeti, da bi datoteko zaprli izrecno, to se naredi samodejno.


Izkazalo se je, da se na koncu vrstice besedilne datoteke skriva " n", zato sem moral odstraniti ime polja "zaupanje". Ko sem to naredil, je vse delovalo v redu!

Tu je izvleček iz kode, vključno s spremembo, ki sem jo naredil v primeru, da bi še kdo naletel na to težavo:

za požar v lstFires: če je 'Latitude' v ognju: #vrstica za branje, uporabite funkcijo deljenja fn = fire.split (",") fName = fn [2] .rstrip () #strip, da se znebite  n