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.
'First_Num' und' Second_Num' sind keine Listen, sondern Strings, also ist 'Second_Num [n + 1]' sicherlich nicht das was du willst. – Jan
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. –
@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