Seite 1 von 1

.csv schreiben, Problem bei Übergabe/Aufruf

Verfasst: Sonntag 29. November 2009, 12:45
von projektor
Hi,

hab folgendes Problem:

.csv writer:

Code: Alles auswählen

import sys
import csv
import fwpf_studenten

#stud=fwpf_studenten.myclass()
#polist = []
#polist = stud.liste()

class myclass:
    def schreiben(self, polist):
        try:
            d = open("points.csv","w")
        except:
            print("Dateizugriff fehlgeschlagen")
            sys.exit(0)

        for element in polist:
            d.write( str (element[0]) + ";"
                    + element[1] + ";"
                    + element[2] + ";"
                    + element[3] + ";"
                    + str(element[4]) + ";"
                    + element[5] + ";"
                    + str(element[6]) + ";"
                    + str(element[7]) + ";"
                    + str(element[8]) + ";"
                    + element[9] + ";"
                    + element[10] + "\n")

        d.close()



#a = myclass()
#a.schreiben(polist)

Test-Aufrufer:

Code: Alles auswählen

import sys
import csv
import points_write
import fwpf_studenten

stud=fwpf_studenten.myclass()
polist = []
polist = stud.liste()
a=points_write.myclass()
a.schreiben(polist)

Folgendes sollte passieren: Also wenn ich im .csv-writer Modul die Kommentierungen löse, funktioniert es soweit. Das Problem ist, das ich das Modul gerne so hätte das ich es von einem anderen Modul aus aufrufen kann. Das bekomm ich jedoch irgendwie nicht ganz hin, weiß nicht wo mein Fehler liegt. Als Parameter sollte das writer Modul eine 2-dimensionale Liste nehmen, was wie gesagt von dem anderen Modul aus allerdings nicht funktioniert.

Fehlermeldung:

a=points_write.myclass()
AttributeError: 'module' object has no attribute 'myclass'

Verfasst: Sonntag 29. November 2009, 13:01
von Darii
Wie heißen denn deine Dateien? Das wäre mal ganz hilfreich zu wissen. Verwendest du IDLE? Dann könnte schließen helfen.

btw.: warum verwendest du überall diese überflüssigen Klassen?

Verfasst: Sonntag 29. November 2009, 13:39
von EyDu
Und warum nicht gleich das [mod]csv[/mod]-Modul?

Verfasst: Sonntag 29. November 2009, 14:19
von projektor
Die obere heisst points_write so wie es auch eingebunden ist.
Die untere heisst einfach nur test.

Ja ich verwende IDLE, funzt aber trotzdem nicht.

Bezüglich der Klassen: Wenn du mir zeigst wie es auch ohne Klassen in den einzelnen Modulen geht, kann ichs auch ohne machen :)

Verfasst: Sonntag 29. November 2009, 14:36
von EyDu
projektor hat geschrieben:Ja ich verwende IDLE, funzt aber trotzdem nicht.
Was Darii ausdrücken wollte: Wenn du IDLE verwendest, ist IDLE mit hoher Wahrscheinlichkeit der Grund für den Fehler. Oder anders: du machst den Fehler, weil du dich nicht genau genug mit IDLE auskennst. Starte das Script besser mittels "python script_name.py" über die Konsole.
projektor hat geschrieben:Bezüglich der Klassen: Wenn du mir zeigst wie es auch ohne Klassen in den einzelnen Modulen geht, kann ichs auch ohne machen :)
Indem du das "class myclass:" weglässt und die Zeilen 11-31 nach links einrückst. Dann funktioniert "points_write.schreiben(...)". Code auf Modulebene ist übrigens keine gute Idee, damit wird es nahezu unbrauchbar (Code wird bereits beim Importieren ausgeführt, Code wird nur einmal ausgeführt, globale Variablen, unflexibel). Packe das besser in eine Funktion.

Verfasst: Sonntag 29. November 2009, 15:24
von projektor
Thx @ EyDu und Darii,

das Problem war tatsächlich IDLE, aber wo liegt da das Problem und gibt es dieses Problem auch mit PyScripter oder ähnlichen?

Das mit den Modulen ist mir schon bewusst, aber das ist schon absicht so :)


---> Hab da noch ein anderes Problem:
Kann mir mal jemand nen Code verraten, wie es möglich ist an eine 2-dimensionale Liste, in jeder Zeile hinten jeweils noch eine Spalte anzuhängen??? Denke das müsste mit append funktionieren, jedoch appendiert er bei mir stehts nur das eingegebene ganz am ende der Liste, und nicht jeweils in jede Zeile.

Verfasst: Montag 30. November 2009, 00:56
von jerch
projektor hat geschrieben:...
Das mit den Modulen ist mir schon bewusst, aber das ist schon absicht so :)
Bei der csv-Erstellung gibts aber einiges zu beachten, damit Deine Datei später noch richtig eingelesen werden kann, diese Arbeit kann Dir das Modul abnehmen. Aber naja..
projektor hat geschrieben: ---> Hab da noch ein anderes Problem:
Kann mir mal jemand nen Code verraten, wie es möglich ist an eine 2-dimensionale Liste, in jeder Zeile hinten jeweils noch eine Spalte anzuhängen??? Denke das müsste mit append funktionieren, jedoch appendiert er bei mir stehts nur das eingegebene ganz am ende der Liste, und nicht jeweils in jede Zeile.
Wenn Du Dir vergewärtigst, dass Du eine Liste von Listen vor Dir hast, fällt Dir bestimmt ein, worauf Du das append() anwenden mußt. ;)

Verfasst: Mittwoch 2. Dezember 2009, 15:02
von projektor
Vielen Dank Jerch bin drauf gekommen was du meinst und hat wunderbar geklappt :)