Erstellung einer XML-Datei aus Logdatei

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

vikingrussel hat geschrieben:@gerold:
was meinst du hier mit dem root_tag und dem files_tag.
Hallo vikingrussel!

Das hier geht NICHT als XML-durch:

Code: Alles auswählen

<settings>
  <apache>
  </apache>
  <postfix>
  </postfix>
</settings>
<log>
  <apache>
  </apache>
  <postfix>
  </postfix>
</log>
Es muss immer einen übergeordneten TAG geben. Diesen nennt man Root-Tag -- also Wurzel-TAG. Das hier: ``<apache></apache>`` ist ein so genanntes TAG. Im ElementTree wird dieser Tag durch ein Element oder SubElement dargestellt.

Hier ein gültiges XML-Beispiel:

Code: Alles auswählen

<?xml version="1.0" encoding="windows-1250"?>
<services>
  <apache>
    <settings>
      <setting id=automatic_start>True</setting>
      <setting id=user>www</setting>
    </settings>
    <log_lines>
      <line>2007-01-01 20:15:00 - Apache start<line>
      <line>2007-01-01 20:16:00 - Apache stop<line>
    </log_lines>
  </apache>
  <postfix>
    <settings>
      <setting id=automatic_start>False</setting>
      <setting id=user>postfix</setting>
    </settings>
    <log_lines>
      <line>2007-01-01 20:15:00 - Postfix start<line>
      <line>2007-01-01 20:16:00 - Postfix stop<line>
    </log_lines>
  </postfix>
</services>
"<services>" ist das Root-Element und unterhalb sind die anderen Elemente (TAGs) angeordnet. root_tag und files_tag sind nur zugewiesene Namen für die Elemente, denen man wieder andere Elemente unterordnen kann.

Edit:
Siehe auch: http://de.wikipedia.org/wiki/Tag_%28Informatik%29

mfg
Gerold
:-)
Zuletzt geändert von gerold am Dienstag 5. Juni 2007, 14:39, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Müsste man für gültiges XML nicht auch ein DTD oder xmlns haben?
TUFKAB – the user formerly known as blackbird
vikingrussel
User
Beiträge: 40
Registriert: Mittwoch 30. Mai 2007, 07:45

@gerold: das bringt natürlich licht ins tiefe dunkel, hätte man zwar auch selber draufkommen können aber egal, trotzdem danke
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

blackbird hat geschrieben:Müsste man für gültiges XML nicht auch ein DTD oder xmlns haben?
Hallo blackbird!

Nein, das braucht man nicht. XML gilt auch ohne Schema und Namespaces als gültig. Ein Schema ist ideal um einen Datenaustausch zu validieren, verkompliziert ihn aber auch. Ideal an so einem Schema ist, dass schon der Sender der Daten prüfen kann, ob die Daten prinzipiell gültig sind, noch bevor diese an den Empfänger geschickt werden.

EDIT:

Die Spezifikation spricht in oben gezeigten Beispiel von einem wohlgeformten XML. Du hast recht, gültiges XML bedarf eines DTD. Hier ein Auszug aus der Spezifikation von XML 1.0:
Ein textuelles Objekt ist ein wohlgeformtes XML-Dokument, wenn:
1. es als Gesamtheit betrachtet zu der mit document bezeichneten Produktion passt,
2. es alle Wohlgeformtheitsbeschränkungen dieser Spezifikation erfüllt und
3. jedes seiner parsed Entities, welches direkt oder indirekt referenziert wird, wohlgeformt ist.
Ein XML-Dokument ist gültig, wenn es eine dazugehörige Dokumenttyp-Deklaration besitzt und wenn sich das Dokument an die darin formulierten Beschränkungen hält.
Siehe: - http://edition-w3c.de/TR/2000/REC-xml-2 ... wellformed
- http://edition-w3c.de/TR/2000/REC-xml-2 ... /#dt-valid

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Zur Terminologie: `<apache></apache>` ist ein *Element* mit je einem öffnenden und schließenden *Tag*. Es gibt auch in sich geschlossene Elemente, die haben dann nur ein Tag: `<apache/>`.
vikingrussel
User
Beiträge: 40
Registriert: Mittwoch 30. Mai 2007, 07:45

gibt es in python eine feste variable oder ähnliches, wo es (wie unten) sofort erkennt das es sich um ein datum oder eine uhrzeit handelt?

Code: Alles auswählen

[10/02/2006-19:00:04 ,1,0,0,0,-1,2,3,0,0]
[10/02/2006-19:00:06 ,1,0,0,0,-1,2,18,0,0]
BlackJack

Ich weiss nicht ob ich die Frage richtig verstanden habe, darum die Gegenfrage: Ist im `datetime`-Modul etwas, das Dir weiterhilft?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

vikingrussel hat geschrieben:sofort erkennt das es sich um ein datum oder eine uhrzeit handelt
Hallo vikingrussel!

Im Cheeseshop habe ich diese Pakete gefunden, mit denen du dein Problem evt. lösen kannst:
- http://python.org/pypi/iso8601
- http://python.org/pypi/parsedatetime
- http://python.org/pypi/plistservices
- http://python.org/pypi/magicdate

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
vikingrussel
User
Beiträge: 40
Registriert: Mittwoch 30. Mai 2007, 07:45

kann ich jetzt so nicht beurteilen. so gesehen hab 2 probleme
1. log-datei lässt sich nicht öffnen
2. das mit datum und uhrzeit

Code: Alles auswählen

import sys, datetime

f = open('BrightStore.log', 'r')
for line in sys.stdin.readlines():
    if line[0] == ?:
        print line,
beim fragezeichen weiß ich nich was rein soll.
das bezieht sich auf den oben genannten ausschnitt der log-datei
vikingrussel
User
Beiträge: 40
Registriert: Mittwoch 30. Mai 2007, 07:45

was soll ich mit den egg-dateien machen???
BlackJack

vikingrussel hat geschrieben:kann ich jetzt so nicht beurteilen. so gesehen hab 2 probleme
1. log-datei lässt sich nicht öffnen
2. das mit datum und uhrzeit

Code: Alles auswählen

import sys, datetime

f = open('BrightStore.log', 'r')
for line in sys.stdin.readlines():
    if line[0] == ?:
        print line,
beim fragezeichen weiß ich nich was rein soll.
das bezieht sich auf den oben genannten ausschnitt der log-datei
Ich beschreibe mal was Dein Quelltext tut:

Es wird eine Datei geöffnet die nicht benutzt wird.

Es werden Zeilen von der Standardeingabe gelesen. Und zwar alle auf einmal und nicht einzeln, was speicherschonender wäre.

Und dann willst Du das erste Zeichen in der Zeile mit irgendwas vergleichen um zu entscheiden ob die Zeile ausgegeben wird.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Wenn das Datum in einem konstanten Format ist, kannst du dir über ``datetime.strptime()`` oder ``time.strptime()`` den Datumsstring anhand eines von dir gesetzten Formats in ein Datums-/Zeitobjekt umwandeln lassen.

Wenn die Formate unterschiedlich sind, könnte einer der von gerold genannten "schlauen" Datumsparser helfen. Bei ungewöhnlichen Formaten klappt das aber auch nicht.

Dateien mit der Endung ``.egg`` sind Python-Eggs, wie sie das ``setuptools``-Paket erstellt. Einer der Vorteile ist, dass nicht rein in Python geschriebene Pakete (z.B. mit Codeteilen in C) direkt in der passenden, vorkompilierten Version (wenn vorhanden) bezogen werden können und man so nicht selbst kompilieren muss.

Wenn du ``setuptools`` installiert hast, kannst du darüber die Eggs installieren. Mit dem Kommando ``easy_install docutils`` kannst du dir vollautomatisch das Modul ``docutils`` aus dem Cheeseshop in der passenden Version herunterladen und installieren lassen.
vikingrussel
User
Beiträge: 40
Registriert: Mittwoch 30. Mai 2007, 07:45

@BlackJack;
zum 1. punkt: wie benutze ich sie?
zum 2.: is erstmal net so wichtig
zum 3.: ob es ein datum und uhrzeit is

@YOGi;
wie genau tu ich ein format setzen?
das mit den egg-dateien hat so geklappt, danke dir
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Schau dir dieses Beispiel an.
vikingrussel
User
Beiträge: 40
Registriert: Mittwoch 30. Mai 2007, 07:45

cool, danke.
das andere hab ich jetzt hingekriegt. nochmals danke für eure hilfe
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

Hallo,

ich habe die Python Version 2.4.1 und bin an diese Version gebunden.

Meine Frage lautet:

Gibt es unter dieser Verison auch den ElementTree oder nur ab Version 2.5?

Falls nicht wie erstelle ich mit V. 2.4 eine XML-Datei?

Schon mal Danke für die Antworten

Aquerias
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Aquerias hat geschrieben:Gibt es unter dieser Verison auch den ElementTree oder nur ab Version 2.5?
Hallo Aquerias!

Unter Python 2.4 kannst du dir ElementTree nachinstallieren.

http://effbot.org/zone/element-index.htm

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

Hallo gerold,

vielen Dank für den Hinweis. Hat mir sehr weitergeholfen.
Konnte das Plug in installieren und das Modul laden.

Ich glaube ohne dieses Forum wäre ich aufgeschmissen.

Gruß Aquerias
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Aquerias hat geschrieben:Ich glaube ohne dieses Forum wäre ich aufgeschmissen.
Nein, in dem Fall hättest du wohl erst eine Suchmaschine angeworfen um zu merken, dass es ElementTree auch für ältere Python-Versionen gibt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Aquerias
User
Beiträge: 28
Registriert: Freitag 28. September 2007, 10:33

Hallo Leonidas,

tja, damit könntest Du recht haben.

Ich wollte mit meinem Kommentar nur zum Ausdruck bringen wie toll ich Euer Forum finde. Großes Lob an alle Administratoren und Moderatoren. Bei Euch findet man immer Hilfe.

Gruß Aquerias
Antworten