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

Dienstag 29. März 2005, 16:30

meinte eher die Dateilänge.

Für gzip brauch ich eigentlich kein Script, da reicht ein einfacher Befehl in der Konsole auch aus.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 29. März 2005, 16:34

Nein nein, mit dem Python Modul gzip kannst du direkt von Python aus transparent aus der gzip-Datei lesen/schreiben.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Dienstag 29. März 2005, 17:45

Hi!

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
Die Struktur find ich nicht schlecht. So kann man die Zeile einfach auftrennen

Code: Alles auswählen

word, translations, tip, lsp = line.split('#')
und ob die Antwort eine richtige Übersetzung ist, mit

Code: Alles auswählen

if guess in translations.split(';'):
    print "right"
else:
    print "wrong"
überprüfen.

Gruß, mawe
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 29. März 2005, 18:10

mawe hat geschrieben:Also ich weiß nicht, irgendwie find ich die bisherigen Lösungen für ein einfaches Vokabelprogramm zu übertrieben.
Hey, mawe, das soll nicht irgendein Vokabelprogramm werden, sondern ein sehr gutes. Und ich finde auch das YAML sich dafür seht gut eignet.

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

Dienstag 29. März 2005, 18:28

Natürlich will ich ein sehr gutes :P (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...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 29. März 2005, 18:35

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

Dienstag 29. März 2005, 18:38

Tja, und wie mach ich das jetzt?

raw_input("Sprache Eins")
raw_input("Sprache Zwei:")

Weiter komm ich nicht...Wollte eigentlich erst später mit Python anfangen und zuerst die Liste mit den Vokabeln schreiben.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Dienstag 29. März 2005, 19:24

Hi!
Leonidas hat geschrieben: Hey, mawe, das soll nicht irgendein Vokabelprogramm werden, sondern ein sehr gutes.
Jaja, blabla :D 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.

Gruß, mawe
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 29. März 2005, 19:29

Ist schon faszinierend, man lässt alles stehen und liegen, damit man überlegen kann wie man etwas in Python programmieren kann :D

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()
Das Speichern musst du übernehmen, aber mit YAML sollte das kein so großes Problem sein.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 29. März 2005, 21:36

mawe hat geschrieben:Nö, im Ernst, was is an CSV so schlecht.
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.
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 Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 29. März 2005, 21:48

Hallo!

Hier kommt noch mein Senf zum Thema "Hinzufügen neuer Daten an das YAML-File". :D

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()
mfg
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.
BlackJack

Mittwoch 30. März 2005, 21:53

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

Donnerstag 31. März 2005, 14:44

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:

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()
Der Fehler kommt im main() Teil, und ich hab keine Ahnung wieso denn so wie es jetzt dasteht kommt der Fehler:

Code: Alles auswählen

  File "test3.py", line 37
    l=f.readline() # Rufe Methode readline() auf Datei auf.
    ^
SyntaxError: invalid syntax
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...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Donnerstag 31. März 2005, 14:59

Hi!

Einrückungsfehler. Die Zeile mit dem l sollte genau so weit eingerückt sein wie die Zeile oberhalb :wink:

EDIT: In der while Schleife am Ende stimmt auch mit den Einrückungen etwas nicht.

Gruß, mawe
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Donnerstag 31. März 2005, 15:26

Danke, an das Einrücken muss man sich erst gewöhnen...

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
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.
Antworten