Vairāk

Python nosacījuma paziņojums, kas ļauj apvienot divas ievades vai tikai vienu ievadi


Man ir ModelBuilder process, kuru es pārveidoju par python papildu rediģēšanai. Šajā procesā tiek buferizētas gan punktu, gan līniju pazīmes (ievades mainīgie), un pēc tam iegūtie daudzstūri tiek apvienoti vienā pazīmē papildu procesiem. Bet es vēlos modeli padarīt daudzpusīgāku, lai tas darbotos, ja tiktu piegādāta tikai viena no ievadēm (punktu VAI līnijas). Pašlaik tas avarē, ja tiek piegādāta tikai viena ieeja. Vai ir veids, kā novirzīt modeli tā, ka, ja tiek nodrošināta tikai viena ievade, tā izlaiž sapludināšanas darbību (vai veiksmīgi apvienojas ar nulli) un pēc tam pāriet uz nākamajām darbībām.

Šeit ir mans kods:

# Process: Buferis (6) arcpy.Buffer_analysis (in_points_shp, point_buffer_shp, "buferis", "FULL", "ROUND", "NONE", "", "PLANAR") # Process: Buffer (11) arcpy.Buffer_analysis (in_LINE_shp , line_buffer_shp, "buferis", "FULL", "ROUND", "NONE", "", "PLANAR") # Process: Apvienot (2) arcpy.Merge_management ("Z:  support_docs  point_buffer.shp; Z :  support_docs  line_buffer.shp ", merge_output_shp,

... apvienot izvadi, tad pāriet uz citiem procesiem. Manas python prasmes šobrīd ir nulle.


Jūs varat darīt vismaz divas lietas.

Jūs varētu definēt noklusējuma vērtības saviem parametriem un pēc tam, ja noklusējuma vērtības nenotiek jūs izpildīsit noteiktu koda daļu.

Piemēram, pieņemsim, ka pirmais parametrs prasa punktu. Ja tika ievadīts pirmais parametrs, tad tas nebūs noklusējuma, lai jūs varētu turpināt un izpildīt koda gabalu (es tikko izmantoju drukāt paziņojumi vienkāršības labad, protams, tā vietā jūs iekļautu savu īsto kodu):

def printSomething (a = "noklusējums", b = "noklusējums"): ja a! = "noklusējums" un b! = "noklusējums": drukājiet a + b elif a! = "noklusējums": drukājiet a else: drukājiet b

Vai arī jūs varētu izmantot kaut ko līdzīgu *args. Tā varētu būt "labāka" pieeja, taču to varētu būt nedaudz grūtāk izveidot.

Protams, būs arī citi veidi, bet es domāju, ka pirmajam vajadzētu būt viegli īstenojamam un tas darbotos labi.


Labi, es redzu, ka jūs nedaudz pārskatījāt savu jautājumu.

Ar šo skriptu jums vajadzētu nokļūt lielākajā daļā ceļu. Skripts uzņems formu failu sarakstu, un, ja sarakstā ir vairāk nekā 1, tas buferizē katru formas failu un veic sapludināšanu. Ja tiek atrasts tikai viens, tas veic tikai buferi.

Vienkārši ievietojiet savu formu failu sarakstu galvenajā funkcijā.

importēt arcpy importēt sys importēt os def multibuffer (shapefile_list): ja len (shapefile_list) == 1: dirname = os.path.dirname (shapefile_list [0]) basename = os.path.basename (shapefile_list [0]) output_basename = os .path.splitext (basename) [0] + '_buffer' + os.path.splitext (basename) [1] output_filename = os.path.join (dirname, output_basename) # Jūs darītu savu buferi, iestatot bufera attālumu līdz lauks vai vērtība arcpy.Buffer_analysis (shapefile_list [0], output_filename, 5) arcpy.AddMessage ('Output: {0}'. format (output_filename)) print 'Output:', output_filename elif len (shapefile_list)> 1: buffered_shapefile_list = [] formas failam formāfaila_ sarakstā: dirname = os.path.dirname (shapefile) basename = os.path.basename (shapefile) output_basename = os.path.splitext (basename) [0] + '_buffer' + os.path. splitext (basename) [1] output_filename = os.path.join (dirname, output_basename) # Jūs šeit darītu savu buferi, iestatītu bufera attālumu līdz laukam vai vērtību arcpy.Buffer_analysis (shapefile, output_f ilename, 5) # Pievienojiet izejas sarakstam. buffered_shapefile_list.append (output_filename) arcpy.AddMessage ('Output: {0}'. format (output_filename)) print 'Output:', output_filename # Apvienot buferizētos formas failus # Pass buferizēto formu failu sarakstā # Sapludināšanas fails tiks izveidots direktorijā lastformfile buferizēts arcpy.Merge_management (buffered_shapefile_list, os.path.join (dirname, 'merged_buffer.shp')) arcpy.AddMessage ('Buferētie faili apvienošanai: {0}'. format (str (buffered_shapefile_list))) arcage.AdMess ('Apvienotais fails: {0}:' .format (os.path.join (dirname, 'merged_buffer.shp')))) print 'Apvienotie buferētie faili: {0}'. Format (str (buffered_shapefile_list)) print ' Apvienotais fails: {0}: '.format (os.path.join (dirname,' merged_buffer.shp '))) else: print' Formu faili nav norādīti 'def main (): #put formas failu sarakstā ar aizpildījuma ceļiem shapefile_list = ['C: /data/point.shp', 'C: /data/line.shp', 'C: /data/point_2.shp'] multibuffer (shapefile_list), ja __name__ == '__main__': main ()

Līdzīgi tam, ko BritishSteel ieteica ar *args:

Jūs varat ievadīt atslēgu vērtību kopu. Uzrakstiet funkciju, kas pieņem ** kwargs, un nododiet to diktā ar saviem atslēgu vērtību pāriem.

Nepieciešami # intertools moduļi importēt itertools # funkciju, kas pieņem atslēgu un vērtību pārus def show_elevation_temperature (** kwargs): atslēgai, vērtība kwargs.iteritems (): print 'Key: {0} Value: {1}'. format (key , vērtība) def main (): key_values ​​= {'1700': '0', '2500': '-1', '4000': '-2'} # izsauciet funkciju un ievadiet dict show_elevation_temperature (** key_values), ja __name__ == '__main__': main ()

Iepriekš minētās funkcijas izvadē jāparāda:

Atslēga: 1700 Vērtība: 0 Atslēga: 4000 Vērtība: -2 Atslēga: 2500 Vērtība: -1


Skatīties video: server, continued (Oktobris 2021).