meinte eher die Dateilänge.
Für gzip brauch ich eigentlich kein Script, da reicht ein einfacher Befehl in der Konsole auch aus.
Wie am besten Datei aufbauen?
-
- 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...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du kannst auch sagen:marco_ hat geschrieben: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...
Erste Sprache: Deutsch (beispiel)
Zweite Sprache: Englisch.
Dann kannst du sagen:
Deutsches Wort: Grenze.
Englisches Wort? Boundary
Englisches Wort? Frontier
Englisches Wort? Border
Englisches Wort? [Enter]
- hier wieder von vorne -
Deutsches Wort? [Enter]
Quit.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Gruß, mawe
Jaja, blabla Nö, im Ernst, was is an CSV so schlecht. Ich finde das eignet sich dafür hervorragend. Auch das Schreiben der Vokabledatei ist so IMHO ein Klacks, dafür braucht man dann kein Script.Leonidas hat geschrieben: Hey, mawe, das soll nicht irgendein Vokabelprogramm werden, sondern ein sehr gutes.
Gruß, mawe
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ist schon faszinierend, man lässt alles stehen und liegen, damit man überlegen kann wie man etwas in Python programmieren kann
Jetzt mal schnell zusammengehack und kaum getestet:
Das Speichern musst du übernehmen, aber mit YAML sollte das kein so großes Problem sein.
Jetzt mal schnell zusammengehack und kaum getestet:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import yaml
def main():
lang1 = raw_input("Erste Sprache: ")
lang2 = raw_input("Zweite Sprache: ")
runword = True
while runword:
lang1_word = raw_input("%ses Wort: " % lang1)
if not lang1_word:
break
runalt = True
while runalt:
lang2_alt = raw_input("%ses Wort: " % lang2)
if not lang2_alt:
runalt = False
if not lang1_word:
runword = False
if __name__ == '__main__':
main()
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:
Bestimmung einzelner Felder schlecht bestimmbar, unstandarisiert (siehe Wikipedia). Aber gut man kann es auch so machen: erstmal mit CSV arbeiten, wenn es dann einigermaßen läuft, kann man das Format ja immer noch ändern.mawe hat geschrieben:Nö, im Ernst, was is an CSV so schlecht.
Zuletzt geändert von Leonidas am Dienstag 29. März 2005, 21:48, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!
Hier kommt noch mein Senf zum Thema "Hinzufügen neuer Daten an das YAML-File".
mfg
Gerold
EDIT: Wurde so angepasst, dass es zum Beispiel passt.
Hier kommt noch mein Senf zum Thema "Hinzufügen neuer Daten an das YAML-File".
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import yaml
#-----------------------------------------------------------------
class Vokabelkombination(object):
"""
Diese Klasse repraesentiert eine Kombination aus Begriffen in
verschiedenen Sprachen und den zugeh. Hinweisen
"""
#-----------------------------------------------------------------
def __init__(self):
object.__init__(self)
self.data = {}
#-----------------------------------------------------------------
def add(self, lang = "", begr = "", hinw = None):
"""
Fuegt dem Dictionary eine Begriffseinheit hinzu
"""
newitem = {"begr" : begr}
if hinw != None:
newitem.update({"hinw" : hinw})
if self.data.has_key(lang):
self.data[lang].append(newitem)
else:
self.data[lang] = [newitem]
#-----------------------------------------------------------------
def main():
"""
Hauptprogramm zum Testen
"""
DATAFILE = "mein_datenfile.yml"
kombi = Vokabelkombination()
kombi.add("de", "deutsch")
kombi.add("de", "deutsch2")
kombi.add("en", "german", "Dies ist ein Hinweis")
# Der Datendatei den neuen Datensatz hinzufuegen
f = file(DATAFILE, "aU")
f.write(yaml.dump(kombi.data))
f.close()
#-----------------------------------------------------------------
if __name__ == "__main__":
main()
Gerold
EDIT: Wurde so angepasst, dass es zum Beispiel passt.
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.
Nur um die Datenformate zu komplettieren: die JavaScript Object Notation, kurz JSON, ist auch ganz nett.
Ich habe gerade Datenaustausch zwischen PHP und Python damit ausprobiert.
Ich habe gerade Datenaustausch zwischen PHP und Python damit ausprobiert.
Ich arbeite gerade an einem dummen Konvertierungsscript. Was mein Textfile (Aufbau: Wort1;Wort2#Übersetzung1;Übersetzung2) in ein yml file umwandelt.
Hab dafür die Ideen von gerold und mawe verwendet.
Es sieht bis jetzt so aus:
Der Fehler kommt im main() Teil, und ich hab keine Ahnung wieso denn so wie es jetzt dasteht kommt der Fehler:
also stimmt was bei line 37 nicht. wenn ich aber ich hab keine Ahnung was, ich hab in der Zeile nichts geändert und bevor ich das script von gerold eingebaut habe hat es auch noch funktioniert...
Hab dafür die Ideen von gerold und mawe verwendet.
Es sieht bis jetzt so aus:
Code: Alles auswählen
import yaml
#-----------------------------------------------------------------
class Vokabelkombination(object):
"""
Diese Klasse repraesentiert eine Kombination aus Begriffen in
verschiedenen Sprachen und den zugeh. Hinweisen
"""
#-----------------------------------------------------------------
def __init__(self):
object.__init__(self)
self.data = {}
#-----------------------------------------------------------------
def add(self, lang = "", begr = "", hinw = None):
"""
Fuegt dem Dictionary eine Begriffseinheit hinzu
"""
newitem = {"begr" : begr}
if hinw != None:
newitem.update({"hinw" : hinw})
if self.data.has_key(lang):
self.data[lang].append(newitem)
else:
self.data[lang] = [newitem]
#-----------------------------------------------------------------
def main():
kombi = Vokabelkombination()
f = open("wordlist.txt", "r") # Ergibt ein Datei-Objekt.
l = f.readline() # Rufe Methode readline() auf Datei auf.
w = file("yaml.txt", "aU")
while l:
print l, # ',' am Ende unterbindet Zeilenvorschub.
words, translations = l.split('#')
print "-" * 20
print words
print translations
print "-" * 40
kombi = Vokabelkombination()
kombi.add("de", words)
kombi.add("en", translations)
w.write(yaml.dump(kombi.data))
l = f.readline()
f.close()
w.close()
Code: Alles auswählen
File "test3.py", line 37
l=f.readline() # Rufe Methode readline() auf Datei auf.
^
SyntaxError: invalid syntax
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Einrückungsfehler. Die Zeile mit dem l sollte genau so weit eingerückt sein wie die Zeile oberhalb
EDIT: In der while Schleife am Ende stimmt auch mit den Einrückungen etwas nicht.
Gruß, mawe
Einrückungsfehler. Die Zeile mit dem l sollte genau so weit eingerückt sein wie die Zeile oberhalb
EDIT: In der while Schleife am Ende stimmt auch mit den Einrückungen etwas nicht.
Gruß, mawe
Danke, an das Einrücken muss man sich erst gewöhnen...
Jetzt kommt ein Fehler beim Aufruf von kombi.add("de", words)...
Den Fehler bekam ich früher auch schon mal und ich weiß immernoch nicht was daran falsch sein soll. words ist doch eine gültige Variable mit Inhalt.
Jetzt kommt ein Fehler beim Aufruf von kombi.add("de", words)...
Code: Alles auswählen
File "txt2yml.py", line 47
kombi.add("de", words)
^
IndentationError: unindent does not match any outer indentation level
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Ich hab mal die Einrückung in Deinem Code überarbeitet:
Vielleicht waren bei Dir Tabs und Spaces gemischt. Ich verwende ausschliesslich Spaces (4 Stück pro Einrückung).
Gruß, mawe
Ich hab mal die Einrückung in Deinem Code überarbeitet:
Code: Alles auswählen
import yaml
#-----------------------------------------------------------------
class Vokabelkombination(object):
"""
Diese Klasse repraesentiert eine Kombination aus Begriffen in
verschiedenen Sprachen und den zugeh. Hinweisen
"""
#-----------------------------------------------------------------
def __init__(self):
object.__init__(self)
self.data = {}
#-----------------------------------------------------------------
def add(self, lang = "", begr = "", hinw = None):
"""
Fuegt dem Dictionary eine Begriffseinheit hinzu
"""
newitem = {"begr" : begr}
if hinw != None:
newitem.update({"hinw" : hinw})
if self.data.has_key(lang):
self.data[lang].append(newitem)
else:
self.data[lang] = [newitem]
#-----------------------------------------------------------------
def main():
kombi = Vokabelkombination()
f = open("wordlist.txt", "r") # Ergibt ein Datei-Objekt.
l = f.readline() # Rufe Methode readline() auf Datei auf.
w = file("yaml.txt", "aU")
while l:
print l, # ',' am Ende unterbindet Zeilenvorschub.
words, translations = l.split('#')
print "-" * 20
print words
print translations
print "-" * 40
kombi = Vokabelkombination()
kombi.add("de", words)
kombi.add("en", translations)
w.write(yaml.dump(kombi.data))
l = f.readline()
f.close()
w.close()
main()
Gruß, mawe
und es lag nur an den Einrückungen? Wird wohl länger dauern bis ich mich an das gewöhnt habe. Danke für die Ausbesserung.Jetzt kann ich mich gleich weiter an die Arbeit machen, will doch auch mal mit dem Hauptprojekt anfangen...obwohl ich immernoch keine Ahnung hab wie ich das mit yaml schaffen soll...
Edit:
Ich weiß, ich bin schrecklich, aber ich hab gleich noch eine Frage. Ich hab die Schleife jetzt so geändert, dass words, und translations nochmal aufgeteilt werden und extra gespeichert werden.
Die Schleife sieht jetzt so aus:
Ich hab mir da irgendwie eine Endlos-Schleife gebastelt...
Edit:
Ich weiß, ich bin schrecklich, aber ich hab gleich noch eine Frage. Ich hab die Schleife jetzt so geändert, dass words, und translations nochmal aufgeteilt werden und extra gespeichert werden.
Die Schleife sieht jetzt so aus:
Code: Alles auswählen
while l:
words, translations = l.split('#')
kombi = Vokabelkombination()
while words:
word = words.split(';')
kombi.add("de", word)
w.write(yaml.dump(kombi.data))
while words:
translation = translations.split(';')
kombi.add("en", translation)
w.write(yaml.dump(kombi.data))
w.write(yaml.dump(kombi.data))
l = f.readline()
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Naja, in Deinen while-Schleifen werden die words bzw. translations nicht weniger, daher endlos
Vorschlag:
Gruß, mawe
Naja, in Deinen while-Schleifen werden die words bzw. translations nicht weniger, daher endlos
Vorschlag:
Code: Alles auswählen
wordlist = words.split(';')
for w in wordlist:
kombi.add("de", w)
Wenn ich euch nicht hätte...Funktioniert jetzt soweit recht gut. Bekomme folgende Ausgabe:
?????
Bzw. wie geh ich jetzt weiter? Gibt's eine gute Dokumentation die den umgang mit Yaml Datein erklärt? Hab nämlich keine Ahnung was ich damit machen soll.
Und jetzt meine Frage an diejenigen die sich mit yaml auskennen (Gerold), kann ich das so stehen lassen, oder muss es unbedingt so aussehen:---
de:
-
begr: Wort5
-
begr: Wort6
-
begr: Wort7
-
begr: Wort8
en:
-
begr: Uebersetzung5
-
begr: Uebersetzung6
-
begr: Uebersetzung7
---
---
de:
-
begr: Wort5
begr: Wort6
begr: Wort7
begr: Wort8
en:
-
begr: Uebersetzung5
begr: Uebersetzung6
begr: Uebersetzung7
?????
Bzw. wie geh ich jetzt weiter? Gibt's eine gute Dokumentation die den umgang mit Yaml Datein erklärt? Hab nämlich keine Ahnung was ich damit machen soll.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Marco!
Bitte setze den Code zwischen zwei dieser BB-Tags [code][/code]
Dann sehen wir weiter
mfg
Gerold
Bitte setze den Code zwischen zwei dieser BB-Tags [code][/code]
Dann sehen wir weiter
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.