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?
Wie am besten Datei aufbauen?
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.
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
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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:Eine andere Alternative ist XML.
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.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).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das kann aber die Dateien nicht anlegen, oder sehe ich das falsch?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...
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 (former) Modvoice
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.
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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
Daraus ist gleich ersichtlich worum es geht.
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>
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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
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?
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>
Gibt es da nicht einfach eine ganz einfache, simple Methode so ein dummes Vokabel-Programm zu erstellen?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Marco!marco_ hat geschrieben: Wie würdet ihr die Datei anlegen?
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
Code: Alles auswählen
import yaml
data = yaml.loadFile(r"C:\yamltest.yml")
for item in data:
print item
del data
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'
}
]
}
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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?
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?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Marco!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?
Natürlich
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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:
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
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"
Aber ehrlich gesagt, finde ich die XML Version wie sie Leonidas vorschlägt eleganter.
cu Sebastian
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Meinst du die Dateigröße???marco_ hat geschrieben:...auch wenn das End-Ergebnis sicher sehr lange wird.
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()
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Also ich weiß nicht, irgendwie find ich die bisherigen Lösungen für ein einfaches Vokabelprogramm zu übertrieben.
Die Struktur find ich nicht schlecht. So kann man die Zeile einfach auftrennen
und ob die Antwort eine richtige Übersetzung ist, mit
überprüfen.
Gruß, mawe
Also ich weiß nicht, irgendwie find ich die bisherigen Lösungen für ein einfaches Vokabelprogramm zu übertrieben.
Code: Alles auswählen
Wort#Übersetzung1;übersetzung2;Übersetzung3...#Tipp#Lautssprache
Code: Alles auswählen
word, translations, tip, lsp = line.split('#')
Code: Alles auswählen
if guess in translations.split(';'):
print "right"
else:
print "wrong"
Gruß, mawe
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hey, mawe, das soll nicht irgendein Vokabelprogramm werden, sondern ein sehr gutes. Und ich finde auch das YAML sich dafür seht gut eignet.mawe hat geschrieben:Also ich weiß nicht, irgendwie find ich die bisherigen Lösungen für ein einfaches Vokabelprogramm zu übertrieben.
Man kann auch statt gzip auch bzip2 (aus Python) verwenden, das komprimiert in der Regel besser.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Natürlich will ich ein sehr gutes (Naja ein funktionierendes wäre natürlich noch besser)
Hmm, hab jetzt versucht ein paar Vokabeln einzugeben und muss sagen das ist sehr anstrengend auf die Dauer. Dachte ich bastel mir ein kleiens Python-Script (Wofür versuch ich es denn zu lernen?)
Hab mir das so gedacht:
1)Als erstes eine Abfrage welche Sprache die erste ist.
2) Das gleiche mit der zweiten Sprache
3)Eine for Schleife
3a)Deutsches-Wort1
3b)Deutsches-Wort2
3c)Deutsches-Wort3
3d)Englisches-Wort1
3e)Englisches-Wort2
3f)Englisches-Wort3
3g)In Datei Speichern.
Wüsste nicht wie ich die Eingabe sonst vereinfachen könnte. Ist ziemlich umständlich...
Hmm, hab jetzt versucht ein paar Vokabeln einzugeben und muss sagen das ist sehr anstrengend auf die Dauer. Dachte ich bastel mir ein kleiens Python-Script (Wofür versuch ich es denn zu lernen?)
Hab mir das so gedacht:
1)Als erstes eine Abfrage welche Sprache die erste ist.
2) Das gleiche mit der zweiten Sprache
3)Eine for Schleife
3a)Deutsches-Wort1
3b)Deutsches-Wort2
3c)Deutsches-Wort3
3d)Englisches-Wort1
3e)Englisches-Wort2
3f)Englisches-Wort3
3g)In Datei Speichern.
Wüsste nicht wie ich die Eingabe sonst vereinfachen könnte. Ist ziemlich umständlich...