Dicts. File.

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
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Code: Alles auswählen

In [8]: with open('bla.txt', 'r') as fobj:
    content = fobj.read()
   ...:     
   ...:     

In [10]: print content
Name: Peter
Figur: Bettler 4
Name: Guenther
Figur: Truil 10
Ist die eine Leerzeile wichtig?
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Da muss ein Fehler sein

In [8]: ??? das kann ich in Python nicht eingeben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das ist ja auch die Eingabeaufforderung von IPython. Das brauchst du nicht eintippen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Schau mal ganz einfach. ich habe die Problemtaik nun mehrmals geschildert.
Es soll die Werte subtrahieren oder addieren je nachdem wie es in der 2ten Textdatei steht.
Ich möchte die Datei ja nicht nur einlesen sondern bearbeiten. :?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

In der ersten Antwort steckt alles, was du suchst. Mehr muss nicht gesagt werden. (Wenn du dich wiederholst, können wir das schon lange)
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

ich verzweifle noch... :cry:
ich komm wirklich nicht drauf.... :shock: :shock: :shock: :roll: :roll:
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Da ihr das Format ja kontrollieren koennt, solltet ihr es dringend aendern.
Menschenlesbar ist gut, aber man muss es nicht so machen, dass man sich beim Einlesen damit im Weg steht.

Als Hinweis mal ein Datensatz in JSON ([mod]json[/mod]):

Code: Alles auswählen

{ "Name" : "Peter",
  "Figur" : "Bettler",
  "Level" : 4
}
Der ist genauso einfach zu lesen aber benoetigt nur eine Zeile zum einlesen.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hab jetzt mal ein kleines Programm in Fortran geschrieben.

Inhalt von bla.txt:

Code: Alles auswählen

Peter Bettler 4
Guenther Truil 10
Inhalt von bla2.txt:

Code: Alles auswählen

Bettler 2
Truil 3
Ausgabe im Terminal:

Code: Alles auswählen

HELDEN:
Peter    Bettler   4
Guenther Truil    10

AKTIONEN:
Alle Bettler   verringert um  2.
Alle Truil     verringert um  3.

HELDEN (nach Aktionen)
Peter    Bettler   2
Guenther Truil     7

PS: Wieso unterstützt paste.pocoo.org eigentlich kein Fortran? :(
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

gkuhl hat geschrieben:Hab jetzt mal ein kleines Programm in Fortran geschrieben.
Ist denn jetzt wieder Puzzlezeit, wo wir Lösungen in Scala, OCaml, Scheme, Factor und Haskell posten?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

@gkuhl danke, aber ich hätt das Prog schon sehr gerne in Python gesehen :)
Ich kann das in fortran nicht so ganz nachvollziehen. :roll:
BlackJack

So könnte man es in Io ausdrücken:

Code: Alles auswählen

#!/usr/bin/env io

toSubtract := Map clone
File clone openForReading("test2.txt") do(
    foreachLine(line,
        parts := line split
        toSubtract atPut(parts first, parts last asNumber)
    )
    close
)

File clone openForReading("test.txt") do(
    foreachLine(line,
        (line findSeq("Figur:") == 0) ifTrue(
            parts := line split
            name := parts at(1)
            value := parts at(2) asNumber
            line = parts atPut(2, value - toSubtract at(name)) join(" ")
        )
        line println
    )
    close
)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

shuang hat geschrieben:Von meinem Kumpel ist es vorgegeben, weil wir ein Spiel spielen und das Spiel programmieren wollen. Er wollte das so, also mach ich es so ;)
Zum Programmieren gehört auch, dass man schlechte Entwürfe überdenkt und ggf. wegwirft! Nur weil Dein Kumpel keine Kenntniss von sinnvollen Standard Formaten hat, bedeutet das ja nicht, dass man sich an solchen Problemen festbeißen muss.
Wieso eigl, ist die Problematik so sehr komplex?
Ist sie nicht. Man kann das auch recht einfach so parsen - aber wozu?
Wie kann man die Aufgabe in 4Min lösen ?? :)
So:
Script
Data File

Nutzt doch einfach ein Standard Format für alle ausgelagerten Flat File Daten. Dann spart Ihr Euch beim Parsen viel Arbeit!
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Danke für die Hilfe bisher, doch die optimale Lösung habe ich immernoch nicht. :shock: Könnt ihr mir bitte zeigen, wenn es eigl doch recht einfach ist dies in der Form zu parsen. Wie ich das durchzuführen habe.


Im ersten Text:
-----------------
Name: Peter
Figur: Bettler 4
Name: Guenther
Figur: Truil 10
Name: Clark
Figur: Brotlexa 38

Text2:
-------------------

Bettler 2
Truil 3
Brotlexa 8

------------------

die Werte aus Text 2 werden im Text1 subtrahiert.
Ergebnis
Name: Peter
Figur: Bettler 2

Name: Guenther
Figur: Truil 7

Name: Clark
Figur Brotlexa 30
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

shuang hat geschrieben:Danke für die Hilfe bisher, doch die optimale Lösung habe ich immernoch nicht.
Was stört Dich an meiner Lösung?
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

@ Hyperion. Das Problem ist einfach das ich die Werte nicht verändern kann. Oder mache ich da was falsch?
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@Shuang: Zeige uns doch bitte deinen Code und sag uns dann wo genau es hängt. In diesem Forum wird dir keiner eine Komplettlösung posten. Sonst können wir auch gleich mit deinem Kumpel in Kontakt treten und mit ihm an seinem Spiel arbeiten. Du wärst dann natürlich raus aus dem Team.
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Das Problem habe ich mehrmals geschildert :)

Datei 1
Datei 2

Date3 = Datei 1(werte) - Datei 2(werte)

Im Grunde ist das alles. :shock:
BlackJack

@shuang: Das zu generelle zu lösende Problem haben wir mittlerweile verstanden. Die Frage war nach den *konkreten* Problemen mit *Deinem* Quelltext und wie der aussieht.

Oder halt was Du gegen bessere Alternativen hast. Wenn das keine Hausaufgabe ist, dann steht auch das Datenformat zur Debatte.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

shuang hat geschrieben:Das Problem habe ich mehrmals geschildert :)

Datei 1
Datei 2

Date3 = Datei 1(werte) - Datei 2(werte)

Im Grunde ist das alles. :shock:
Um das so umzusetzen, könntest Du Du die Klasse 'file' ableiten und `__sub__()` implementieren :)

Code: Alles auswählen

class MyFile(file):
    def __sub__(self, other):
        # hier passiert die Magie der "Dateisubtraktion"
        return neues_dateiobjekt # Datei3
Warum ignorierst Du die Hinweise der anderen, das Datenformat zu ändern, wenn Du doch eigentlich dazu in der Lage wärst? (Hausaufgabe noch nicht fertig? :twisted: ) Das empfiehlt Dir keiner, um Dich zu ärgern, sondern weil es gute Gründe dafür gibt.

Achtung, die obige Sache mit der Dateisubtraktion ist nur Spass
Benutzeravatar
shuang
User
Beiträge: 45
Registriert: Montag 5. April 2010, 14:30

Im Grunde brauche ich den Code von Gkuhl , dass leider nur als Fortran Code existiert. Sein Ergebnis steht auf Seite 3. 8)
Antworten