Seite 1 von 1

[Excel-Export] CSV-Datei in 2-dimensionale Liste einlesen

Verfasst: Sonntag 13. Februar 2005, 00:37
von hk
Hallo Python-cracks,

kann jemand mir Anfänger einen Tip geben, wie ich eine CSV-Datei in eine Liste mit 2 Dimensionen einlesen kann. Jede Zeile besteht aus einem Datum und haufenweise Zahlen (int und float) durch Komma getrennt. Die Zeilen haben alle die gleiche Anzahl von Elementen.
Nach dem Einlesen (das Ende der Datei kenne ich nicht) will ich die einzelnen Elemente der Zeile verschiedenen Listen-Objekten zuordnen. In der Art:

zeile[i,?]=readline

Datum=Zeile[i,0]
Zahl1=Zeile[i,1]
...

Irgendwie klappt das nicht.

hk :?

Edit (Leonidas): Topic verändert und verschoben.

Verfasst: Sonntag 13. Februar 2005, 00:56
von Dookie
Hi hk,

meinste so?

Code: Alles auswählen

f = file("daten.csv", "r")
res = []
for line in f:
    res.append(line.split(","))
f.close()
print res
Gruß

Dookie

Verfasst: Sonntag 13. Februar 2005, 00:57
von Leonidas
Du könntest das Modul CSV nutzen, das hilft dir vermutlich weiter.

Verfasst: Sonntag 13. Februar 2005, 01:13
von Dookie
der Zugriff auf mehrdimensionale Listen ist dann
datum = zeile[0]
zahl1 = zeile[1]
zahl2 = zeile[2]
...



Dookie

CSV-Datei in 2-dimensionale Liste einlesen

Verfasst: Sonntag 13. Februar 2005, 23:37
von hk
Hallo Dookie, Hallo Leonidas,
danke für die schnelle Hilfe, schlaft ihr denn nie? Ich hatte ein gutes Gefühl, aber irgendwas mache ich wohl noch falsch. Wenn ich das Modul CSV importieren will kommt diese Meldung. Wo kann man das Modul bekommen?

Code: Alles auswählen

Traceback (most recent call last):
  File "<string>", line 1, in ?
  File "C:\Programme\Python\Programme\test2.py", line 1, in ?
    import csv, sys
ImportError: No module named csv

Wenn ich csv wieder heraus nehme bleibt er an dem Filenamen hängen. Der Programmabschnitt sieht so aus. Ist der wenigsten prinzipiell richtig, so hatte ich die Hinweise verstanden:

Code: Alles auswählen

    f = file("c:\programme\python\programme\daten.csv", "r") 
    zeile = [] 
    for line in f: 
        zeile.append(line.split(",")) 
        Datum[line]=zeile[line][0]
        for j in range(1,6,1):
            Zahl[line][j]=zeile[line][j]

        xZahl[line]=zeile[line][7]
        yZahl[line]=zeile[line][8]        

und die Fehlermeldung so:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\PROGRA~1\Python\Tools\idle\Debugger.py", line 37, in run
    return apply(bdb.Bdb.run, (self,) + args)
  File "C:\Programme\Python\lib\bdb.py", line 349, in run
    exec cmd in globals, locals
  File "<string>", line 1, in ?
  File "C:\Programme\Python\Programme\test2.py", line 113, in ?
    anzeigen()
  File "C:\Programme\Python\Programme\test2.py", line 71, in anzeigen
    f = file("c:\programme\python\programme\daten.csv", "r")
IOError: [Errno 2] No such file or directory: 'c:\\programme\\python\\programme\\daten.csv'
Dann hab ich da noch ein Problem:

Ich möchte ein Tastenfeld mit 10*10 Button also 1 bis 100. Ich dachte ich mache das mit einer 2fachen for-Schleife. Soweit so gut. Über dem Tastenfeld ist ein Label, wenn man einen der Button drückt soll die entsprechende Zahl des Button in dem Label erscheinen und zwar so, dass sie zusätzlich zu den schon gedrückten Zahlen erscheint. Ich habe schon verschiedene Möglichkeiten für command ausprobiert, aber kein bringt das gewünschte Ergebnis. Wie müsste die Funktion "anzeigen" aussehen? Oder geht das ganz anders.

Code: Alles auswählen

lb = Label(hf, bg="#FFFFFF", bd=5, relief="sunken", anchor="e")
lb.grid(row=0, column=0, columnspan=10, sticky="we")


for i in range(1,11,1):
    for j in range(0,10,1):
        Zahl=((i-1)*10)+(j+1)
        b = Button(hf, text=Zahl, width=3, command=anzeigen)
        b.grid(row=i, column=j)
Grüße :?
hk

was ist this

Verfasst: Sonntag 13. Februar 2005, 23:43
von hk
was wird mit modul this importiert? ich hoffe die Frage ist nicht zu peinlich :oops:
Gruß
hk

Verfasst: Sonntag 13. Februar 2005, 23:53
von XT@ngel
hi hk,
wenn du import this im interaktiven Interpreter eingibst gibts diese Ausgabe.

Code: Alles auswählen

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
>>>
:wink:

MfG
Andreas

Re: was ist this

Verfasst: Sonntag 13. Februar 2005, 23:53
von BlackJack
hk hat geschrieben:was wird mit modul this importiert?
Damit wird das "Zen of Python" importiert und ausgegeben. Probiers einfach mal im interaktiven Interpreter aus.

Zum csv Modul: Welche Python-Version benutzt Du? Das sollte ab 2.3 dabei sein.

modul csv ab 2.3

Verfasst: Montag 14. Februar 2005, 00:50
von hk
danke für den Hinweis Andreas, ich bin noch bei 2.2 sollte wohl mal updaten. Gruß hk

Verfasst: Montag 14. Februar 2005, 14:16
von Leonidas
Am besten gleich mal auf 2.4, das hat noch einige nette Gimmicks :)

Und schlafen? Nein, warum auch?

Verfasst: Montag 14. Februar 2005, 17:05
von Dookie
Hi nochmal zu Deinem Problem:
änder mal die Zeile
f = file("c:\programme\python\programme\daten.csv", "r")
in
f = file(r"c:\programme\python\programme\daten.csv", "r")

Gruß

Dookie