Hallo,
sorry das ich mich nicht solnage gemeldet habe. Gut ich versuch ja immer noch die Daten
aus der Textdatei in die von der xml Struktur gegebene Tabelle zu importieren.
Gut also ich mit diesem Skript wird jetzt eine Liste erstellt welche ein dictionary beinhaltet
welches dann mit der for Schleife dann durchlaufen wird.
Code: Alles auswählen
import xml.parsers.expat
import MySQLdb
class Reader:
def read( self, filename ):
self.query = '['
self.path = []
p = xml.parsers.expat.ParserCreate()
p.StartElementHandler = self.start_element
p.EndElementHandler = self.end_element
p.CharacterDataHandler = self.char_data
f = open("C:\\test.xml", 'r' )
p.ParseFile( f )
f.close()
def add_seperator( self ):
if not self.first_col:
self.query += ", "
else:
self.first_col = False
def start_element( self, name, attrs):
path = "/" . join( self.path )
if path == 'Media':
if name == 'Table':
self.first_col = True
self.path.append( name )
self.cur_data = ''
def end_element( self, name):
path = "/" . join( self.path )
if path == 'Media/Table/FixedLength/FixedColumn/Name':
self.add_seperator()
self.query += "['" + self.cur_data + "',"
if path == 'Media/Table/FixedLength/FixedColumn/FixedRange/Length':
self.query += "'length': " + self.cur_data + "}]"
if path == 'Media/Table/FixedLength/FixedColumn/FixedRange/From':
self.query += " {'from': " + self.cur_data + ","
if path == 'Media/Table':
self.query += "]"
del self.path[-1]
def char_data( self, data):
self.cur_data += data
def get_query( self ):
return self.query
r = Reader()
r.read('test.xml' )
spec = r.get_query().encode('latin-1')
print spec
f = file("C:\\test.txt", 'r')
for line in f:
line = line.splitlines()[0]
print 'Line: %s' % line
for specline in spec:
from_point = specline[1]['from']
to_point = from_point + specline[1]['length']
data = line[from_point:to_point]
name = specline[0]
print 'name: %s' % name
print 'Data: %s' % data
print 'Closing file. EOP'
f.close()
So sieht die Ausgabe aus:
[['NUMMER', {'from': 99,'length': 5}], ['UNIUE', {'from': 104,'length': 8}], ['SKZSICH','length': 3}], ['DATABR', {'from': 115,'length': 8}]]
Iterating through lines
Line: 12345darfichsbkb20001224
Traceback (most recent call last):
File "C:\Programme\Python2.4\gdpdu1.py", line 74, in -toplevel-
from_point = specline[1]['from']
IndexError: string index out of range
Allerdings kommt er irgendwie nicht hiermit zurecht:spec = r.get_query().encode('latin-1').
Zumindest scheint er das wohl als gesamten string zu sehen oder?
Die For Schleife kann nicht durchlaufen werden. Hat jemand ne Idee woran es liegt?
Das 2. Prob ist wenn die Forschleife durchlaufen wird ist es ja so das dann die Daten
der Felder gespiechert werden müssen. zur Zeit werden ja nur auf der data variablen
gespeichert aber sie müssen ja in in diese Anweisung mit eingebaut werden:
INSERT INTO Stat VALUES('Feldinhalt',Feldinhalt',...)
Hat da jemand ne Idee? Ich Danke für eure Mühe:)
MFG
Basti