ich bastle gerade an einem hoffentlich recht flexiblen programm, dass später Dateien mit div. Aufbau einlesen können soll.
Der Aufbau bzw. Inhalt der Datei wird dabei in einer Datenbank gespeichert.
Mein Problem ist nun, dass z. B. auch das Zeilenende Zeichen frei definierbar ist.
Im Regelfall ist es zwar \n, aber in manchen Formaten wird das leider auch alles in eine Zeile geschrieben und dann z. B. +++ als "Zeilenende" definiert.
Soweit ist ja alles an und für sich noch kein Problem, dachte ich.
Ich lese die Datei als ganzes ein und splitte dann die Zeile anhand des aus der Datenbank geholten Zeichens auf.
Problem ist nun, dass \n, wenn ich es aus der DB hole, nicht erkannt wird und daher die Datei nicht aufgeteilt in Zeilen wird. Mit anderen Zeichen klappt das wunderbar.
Und auch wenn ich "\n" von Hand schreibe, anstelle es aus der DB zu lesen, klappt die Funktion.
Ich komm einfach nicht drauf was ich hier falsch mache, bzw. wieso es aus der DB nicht erkannt wird.
Schon mal vielen Dank für jede anregende Idee oder Kritik.
Code: Alles auswählen
class DFU(object):
def __init__(self, datei, dfuart):
self.__datei = datei
self.__art = dfuart
rs = dblookup.DaBa().sqlselect("SELECT * FROM DFUArten WHERE ID = " + str(self.__art))
self.__sep = rs[0].SatzEnde
self.__filebegin = rs[0].DateiAnfang
self.__fileend = rs[0].DateiEnde
self.__spacer = rs[0].Spacer
del rs
def dateilesen(self):
try:
datei = open(self.__datei)
inhalt = datei.read()
print(self.__sep) # <-- gibt \n in der Console aus
zeilen = inhalt.split(self.__sep) # <-- funktioniert, wenn ich stattdessen inhalt.split("\n") schreibe
if zeilen[0][0:len(self.__filebegin)] == self.__filebegin:
print("Anfang OK -->" + zeilen[0][0:len(self.__filebegin)])
else:
print("Anfang Fehler -->" + zeilen[0][0:len(self.__fileend)])
if zeilen[len(zeilen)-1][0:len(self.__fileend)] == self.__fileend:
print("Ende OK" + zeilen[len(zeilen)][0:len(self.__fileend)])
else:
print("Ende Fehler -->" + zeilen[len(zeilen)-1][0:len(self.__fileend)])
print(zeilen)
except FileNotFoundError as e:
print(e)
finally:
if "datei" in locals():
datei.close()
if __name__ == "__main__":
test = DFU(file, 1)
test.dateilesen()