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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 5. Juni 2007, 14:36

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.
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
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:

Dienstag 5. Juni 2007, 14:38

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

Dienstag 5. Juni 2007, 14:41

@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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 5. Juni 2007, 14:43

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
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

Dienstag 5. Juni 2007, 16:03

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

Mittwoch 6. Juni 2007, 13:20

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

Mittwoch 6. Juni 2007, 13:37

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Mittwoch 6. Juni 2007, 14:03

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
vikingrussel
User
Beiträge: 40
Registriert: Mittwoch 30. Mai 2007, 07:45

Mittwoch 6. Juni 2007, 14:04

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

Mittwoch 6. Juni 2007, 14:18

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

Mittwoch 6. Juni 2007, 14:40

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

Mittwoch 6. Juni 2007, 16:39

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

Donnerstag 7. Juni 2007, 10:38

@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

Donnerstag 7. Juni 2007, 11:40

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

Donnerstag 7. Juni 2007, 12:00

cool, danke.
das andere hab ich jetzt hingekriegt. nochmals danke für eure hilfe
Antworten