Wie am besten Datei aufbauen?

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.
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Wie am besten Datei aufbauen?

Beitragvon marco_ » Dienstag 29. März 2005, 08:30

Hallo, ich hab vor mir ein Vokabel-Tool zu basteln. das heißt ich hab eine normale Textdatei, pro Zeile ein Wort und die Übersetzungen.
Jetzt ist aber die Frage, wie ich die Textdatei am besten anlegen soll. Ich dachte mir am besten so in etwa:
Wort#Übersetzung1;übersetzung2;Übersetzung3...#Tipp,Lautssprache,etc.

Wie ihr seht, hätte ich gerne mehrere Übersetzungen, die gewertet werden.

Wie würdet ihr die Datei anlegen bzw. denkt ihr das das für Python realisierbar ist oder gitb es da irgendwelche Probleme?
Benutzeravatar
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Beitragvon hehejo » Dienstag 29. März 2005, 09:39

Du kannst die Datei mit vielen Varianten erstellen.
Deine Vorstellung entspricht ja einer CSV Datei.
Eine andere Alternative ist XML.
Du könntest dir aber auch Klassen bauen, die genau einer Zeile entsprechen, Für jede "Zeile" baust du dir dann eine Instanz welche du dann zum Speichern in eine Datei "cpickle"st (serialisiert).
Dann hast du aber keine Textdatei mehr.
Gruß, Johannes
ascii stupid question,
get stupid ansii

http://www.hehejo.de
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 29. März 2005, 11:32

hehejo hat geschrieben:Eine andere Alternative ist XML.

XML ist was feines zum lesen, aber XML Dateien selberschreiben macht weniger Spaß, deswegen empfehle ich dir dazu XML Persistenz mit XMarshaL oder PyXO oder EaseXML.

hehejo hat geschrieben:Du könntest dir aber auch Klassen bauen, die genau einer Zeile entsprechen, Für jede "Zeile" baust du dir dann eine Instanz welche du dann zum Speichern in eine Datei "cpickle"st (serialisiert).

Dieser Weg ist sehr einfach und schnell zu gehen, aber man kann aber auch noch andere Ansätze gehen, wie über die ZODB oder Durus. Zu guter letzt kannst du das in eine SQL Datenbank speichern, beispielsweise mit PySQLite. Und wenn du kein SQL magst kannst du immer noch ORM verwenden. Der SQL Ansatz hat halt den Vorteil, dass du die Datenbanken auch mit anderem Programmen öffnen kannst aber auch als Textdateien dumpen kannst.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 29. März 2005, 12:11

Man könnte auch ganz billig den eingebauten ConfigParser nutzen... Da gibt es zwar keine Listen, aber ein .split(",") tut auch nicht weh...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 29. März 2005, 12:35

jens hat geschrieben:Man könnte auch ganz billig den eingebauten ConfigParser nutzen... Da gibt es zwar keine Listen, aber ein .split(",") tut auch nicht weh...

Das kann aber die Dateien nicht anlegen, oder sehe ich das falsch?
Was ich noch gefunden habe: EaseXML, das scheint ziemlich in Ordnung zu sein, das sollte ich mir auch noch ansehen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Dienstag 29. März 2005, 12:46

Ist ja recht nett, dass ihr versucht mir zu helfen. Verstehe aber so gut wie nichts...
Es ging mir zuerst nur mal darum wie ich die Datei schreiben muss um sie später bequem in mein Projekt zu implementieren. Ich werde mich erst kommende Woche mit Python beschäftigen können, wollte aber die Datein mit den Wörtern schon schreiben.

Also bitte noch mal ganz einfach, so das ich es auch verstehen? Wie würdet ihr die Datei aufbauen um sie später mit Python verwenden zu können?
Ein ganz normales Vokabel-Programm, mit einem Wort und mehreren Möglichen Lösungen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 29. März 2005, 13:18

Ach du must die Datei von Python aus gar nicht schreiben. Wunderbar!

Was du jetzt machen kannst hängt ab, wie "hochwertig" deine Lösung sein soll:
Man kann es so wie jens vorgeschlagen hat, ganz billig mit dem ConfigParser machen, oder auch mit dem csv-Modul. Das ist wohl am einfachsten.

Ich würde die Datei als XML machen und sie von Python aus mit den XML Modulen oder mit irgendwelchen Tools einlesen. Das hat den Vorteil, dass das Foramt für Menschen praktisch sofort ersichtlich ist, ohne, dass man erst überlegen muss wofür Feld frei in Spalte 7 ist :)

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<vokabeln>
    <vokabel>
        Grenze
        <englisch>boundary</englisch>
        <englisch>border</englisch>
        <englisch>frontier</englisch>
    </vokabel>
</vokablen>

Daraus ist gleich ersichtlich worum es geht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Dienstag 29. März 2005, 13:27

Und das funktioniert einfach so? Ich hätte da eher an eine ganz normale Textdatei gedacht...die kann man schnell und einfach schreiben.
Wird das bei deiner XML Version nicht sehr schnell viel zu lang. Es geht hier nicht um zehn-zwanzig sondern um hunderte Vokabeln und da wird

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<vokabeln>
    <vokabel1>
        Grenze
        <englisch>boundary</englisch>
        <englisch>border</englisch>
        <englisch>frontier</englisch>
    </vokabel1>
    <vokabel2>
        Haus
        <englisch>home</englisch>
    </vokabel1>
    <vokabel3>
        essen
        <englisch>eat</englisch>
    </vokabel1>
    <vokabel4>
        BBGdgf
        <englisch>dsfdsf</englisch>
        <englisch>sfdf</englisch>
        <englisch>sfd</englisch>
    </vokabel4>
</vokablen>

einfach zu lang. Außerdem ist es umständlich zu schreiben.

Gibt es da nicht einfach eine ganz einfache, simple Methode so ein dummes Vokabel-Programm zu erstellen?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Wie am besten Datei aufbauen?

Beitragvon gerold » Dienstag 29. März 2005, 13:40

marco_ hat geschrieben: Wie würdet ihr die Datei anlegen?

Hallo Marco!

Ich persönlich würde dafür pyYAML http://www.pyyaml.org/ verwenden. YAML ("YAML Ain't Markup Language") ist ein Textformat, mit dem es möglich ist, komplexe Datenstrukturen in reiner Textform abzubilden. YAML kann, wenn nötig, auch in XML umgewandelt werden.

Wort#Übersetzung1;übersetzung2;Übersetzung3...#Tipp,Lautssprache,etc.

Dein Beispiel (leicht erweitert mit der Möglichkeit, mehrere deutsche Begriffe zu mehreren englichen Begriffen...) könnte in YAML so aussehen:

Code: Alles auswählen

--- #YAML:1.0
de:
   -
      BEGR: Deutscher Begriff 1
   -
      BEGR: Möglicher zweiter, deutscher Begriff
      HINW: Hier könnte ein Hinweis stehen
en:
   -
      BEGR: Englischer Begriff 1
      LAUT: Hier könnte ein Lautsprachenausdruck stehen
   -
      BEGR: Englischer Begriff 2
      TIPP: Hier könnte ein Tipp stehen
   -
      BEGR: Englischer Begriff 3
      HINW: Hier könnte wieder mal ein Hinweis stehen
      TIPP: Noch ein Tipp dazu
---
de:
   -
      BEGR: Deutscher Begriff 1
   -
      BEGR: Möglicher zweiter, deutscher Begriff
      HINW: Hier könnte ein Hinweis stehen
en:
   -
      BEGR: Englischer Begriff 1
      LAUT: Hier könnte ein Lautsprachenausdruck stehen
   -
      BEGR: Englischer Begriff 2
      TIPP: Hier könnte ein Tipp stehen
   -
      BEGR: Englischer Begriff 3
      HINW: Hier könnte wieder mal ein Hinweis stehen
      TIPP: Noch ein Tipp dazu


Der Code:

Code: Alles auswählen

import yaml
data = yaml.loadFile(r"C:\yamltest.yml")
for item in data:
   print item
del data

generiert daraus folgendes Datenkonstrukt:

Code: Alles auswählen

{
   'de': [
      {
         'BEGR': 'Deutscher Begriff 1'
      },
      {
         'HINW': 'Hier k\xc3\xb6nnte ein Hinweis stehen',
         'BEGR': 'M\xc3\xb6glicher zweiter, deutscher Begriff'
      }
   ],
   'en': [
      {
         'BEGR': 'Englischer Begriff 1',
         'LAUT': 'Hier k\xc3\xb6nnte ein Lautsprachenausdruck stehen'
      },
      {
         'TIPP': 'Hier k\xc3\xb6nnte ein Tipp stehen',
         'BEGR': 'Englischer Begriff 2'
      },
      {
         'HINW': 'Hier k\xc3\xb6nnte wieder mal ein Hinweis stehen',
         'BEGR': 'Englischer Begriff 3', 'TIPP': 'Noch ein Tipp dazu'
      }
   ]
}
{
   'de': [
      {
         'BEGR': 'Deutscher Begriff 1'
      },
      {
         'HINW': 'Hier k\xc3\xb6nnte ein Hinweis stehen',
         'BEGR': 'M\xc3\xb6glicher zweiter, deutscher Begriff'
      }
   ],
   'en': [
      {
         'BEGR': 'Englischer Begriff 1',
         'LAUT': 'Hier k\xc3\xb6nnte ein Lautsprachenausdruck stehen'
      },
      {
         'TIPP': 'Hier k\xc3\xb6nnte ein Tipp stehen',
         'BEGR': 'Englischer Begriff 2'
      },
      {
         'HINW': 'Hier k\xc3\xb6nnte wieder mal ein Hinweis stehen',
         'BEGR': 'Englischer Begriff 3', 'TIPP': 'Noch ein Tipp dazu'
      }
   ]
}


War nur mal so ein Gedanke :-)

mfg
Gerold
:-)

EDIT: Ich habe das Beispiel geändert, da eine Liste zu viel drinnen war.
Zuletzt geändert von gerold am Dienstag 29. März 2005, 22:23, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Dienstag 29. März 2005, 13:48

Danke gerold, das gefällt mir doch schon viel besser. Vor allem ist es nicht allzu umständlich zu schreiben, auch wenn das End-Ergebnis sicher sehr lange wird.
Und das kann man dann problemlos in Python als Projekt integrieren? So dass er per Zufalls-Prinzip ein Vokabel auswählt, und die Antwort abfragt und dann sagt ob es richtig oder falsh war?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 29. März 2005, 13:57

marco_ hat geschrieben:Und das kann man dann problemlos in Python als Projekt integrieren? So dass er per Zufalls-Prinzip ein Vokabel auswählt, und die Antwort abfragt und dann sagt ob es richtig oder falsh war?

Hi Marco!

Natürlich 8)

Dieses Datenmodell ist sehr einfach um weitere Sprachen erweiterbar und funktioniert in alle Richtungen (deutsch-englisch, englisch-deutsch).

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Dienstag 29. März 2005, 14:01

Na, dann scheint es ja genau das zu sein was ich gesucht habe. Sobald ich mit der Text-Datei fertig bin, frage ich um Hilfe wie es weitergeht...bis dahin hab ich auch schon mein Python-BUch bekommen :roll:
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Beitragvon Mr_Snede » Dienstag 29. März 2005, 14:03

Hier gibt es ja schöne Ideen.
Ich hoffe, der Thread bleibt noch etwas länger aktiv - da kann ich vielleicht auch die ein oder andere Idee stibitzen :-))

Aber nun zum Thema,
wie hehejo schon anmerkte mag dir eine Datei als csv gefallen.

Sie könnte vielleicht so aussehen:

Code: Alles auswählen

"deutsches Wort";"englisch1,englisch2, ...";"Zusatzinfos"
"Grenze";"boundary,border,frontier";"Zusatzinfos"


Das ist einfach mit dem csv Modul zu benutzen. Unter Umständen kannst du sogar auf die Anführungszeichen verzichten. Da ich aber schon länger das csv Modul nicht benutzt habe, lege ich dafür keine Hand ins Feuer.

Aber ehrlich gesagt, finde ich die XML Version wie sie Leonidas vorschlägt eleganter.
cu Sebastian
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Dienstag 29. März 2005, 14:05

Ich denke eher yaml ist genau das was ich gesucht habe. Deutsch-Englisch, Englisch-Deutsch, Mehrere Lösungen in beiden Sprachen. Was will man mehr.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 29. März 2005, 14:22

marco_ hat geschrieben:...auch wenn das End-Ergebnis sicher sehr lange wird.

Meinst du die Dateigröße???
Dann könntest du gzip nutzen:

Code: Alles auswählen

import gzip

testfile = "test.zip"

zFile = gzip.GzipFile( mode='wb', fileobj=file( testfile, "wb" ) )

zFile.write("Das ist ein Test")

zFile.close()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]