2016-05-06 7 views
0

Ich habe ein Skript, das durch Text innerhalb jedes Datensatzes einer Tabelle/eines Felds analysiert und diese Werte in Feld/Datensätze einer anderen Tabelle einfügt. Hier ist ein Beispiel für den Text analysiert wird (von "Field1"):Python - Einfügen von Werten aus innerer Schleife mit denen aus äußerer Schleife innerhalb einer Tabelle

Namen Mehrere Wörter (0/24,56) Name Multiple Words2 * (96/24,56) Name Multiple Words3 * (0) Name Multiple Words4 * (96/12.58) Name Mehrere Wörter5 * (96/78.12) Name Mehrere Wörter6 * (0/98.32) Name Mehrere Wörter7 * (96/0) Name Mehrere Wörter8 * (0) Name Mehrere Wörter9 **

Hier ist das Skript

import re, arcpy, sys 

# Local variables: 
Table2 = "D:\Source_Data_Convert.gdb\Table2" 
RAW_Data = "D:\Source_Data_Convert.gdb\RAW_Data_Table2" 

#Create Cursors and Insert Rows 
insertcursor = arcpy.da.InsertCursor(Table2, ["Other_Stuff", "That_Stuff", "Some_More", "From", "To", "Num_One", "Num_Two", "Nums"]) 
with arcpy.da.SearchCursor(RAW_Data, ["Field1", "Other_Stuff", "That_Stuff", "Some_More"]) as searchcursor: 
######## Start the SearchCursor Loop ################### 
     for row in searchcursor: 
      try: 
       Other_Stuff = row[1] 
       That_Stuff = row[2] 
       Some_More = row[3] 
       listFrom = re.split(r'\*\s*\(.*?\)\s*', row[0]) 
       print listFrom 

       Nums = re.findall(r'\(([^)]+)\)', row[0]) 
       for match in re.finditer(r'\(([^)]+)\)', row[0]): 
        parts = match.group(1).split('/') 
        print parts 
        First_Num = parts[0] 
       try: 
        Second_Num = parts[1] 
       except IndexError: 
        #Second_Num = None 
        Second_Num = 0 
        print "First_Num, Second_Num: ", First_Num, Second_Num 

       print "Parsing Successful" 

############ Start the Insertcursor Loop ############   
       for n,Value in enumerate(match): #enumerate is essentially doing a count 
        insertcursor.insertRow((Other_Stuff, That_Stuff, Some_More, listFrom[n], listFrom[n+1], First_Num[n], Second_Num[n+1], Nums[n])) 
        print "Data Inserted" 
      except: 
       pass 
      else: 
       break 

del insertcursor 
del searchcursor 
del row 

ich kann den Wert erhalte korrekt zu drucken, aber ich kann nicht scheinen, die (2) Werte aus der verschachtelten Schleife aus dem mit jedem (1) Wert einfügen zu erhalten: äußere Schleife. Hoffentlich macht meine Frage Sinn. Im Grunde versuche ich (3) Felder zu bevölkern. Ein Feld erhält die Werte aus der äußeren Schleife, die anderen beiden Felder erhalten die Werte (resultierend aus der Teilung) aus der inneren Schleife. Jede Hilfe würde sehr geschätzt. Vielen Dank.

+0

'First_Num' und' Second_Num' sind keine Listen, sondern Strings, also ist 'Second_Num [n + 1]' sicherlich nicht das was du willst. – Jan

+0

Ein paar Dinge. Ich kann Ihnen sagen, dass Sie aus einer anderen Sprache kommen, die Sie nicht brauchen, um explizite 'del' in Python zu tun, hat es automatische Garbage Collection, würde ich vermeiden, die übergreifende' try: außer: else: 'blockieren, weil Sie Ausnahmen vermissen und es macht es zu einem königlichen Fehler zu debuggen. –

+0

@Jan, wenn ich die [n] und [n + 1] entfernen, werden die Felder First_Num und Second_Num mit dem letzten Satz von Werten aus der inneren Schleife gefüllt. Ich brauche diese Werte in die gleiche Zeile der Tabelle wie der Nums-Wert, aus dem sie kamen (z. B. Nums = 96/12,56, Fist_Num = 96, Second_Num = 12,56). – user1457123

Antwort

0

Kompilieren Sie alles, was Sie drucken oder bearbeiten möchten, in eine Liste von Wörterbuchelementen. Auf diese Weise können Sie Daten, die Sie drucken möchten, leichter gruppieren.

So können Sie etwas davon haben:

field_dict['firstField'] = someValue 
field_dict['secondField'] = someList 
field_dict['thirdField'] = someValue 
dict_list.append(field_dict) 

Dann am Ende kann man nur Schleife durch die Liste und drucken, wie Sie wollen, ohne durch verschachtelte Schleifen gebunden zu sein.