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

Du hast eine Idee für ein Projekt?
Antworten
hk

Sonntag 13. Februar 2005, 00:37

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.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Sonntag 13. Februar 2005, 00:56

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
[code]#!/usr/bin/env python
import this[/code]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 13. Februar 2005, 00:57

Du könntest das Modul CSV nutzen, das hilft dir vermutlich weiter.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Sonntag 13. Februar 2005, 01:13

der Zugriff auf mehrdimensionale Listen ist dann
datum = zeile[0]
zahl1 = zeile[1]
zahl2 = zeile[2]
...



Dookie
[code]#!/usr/bin/env python
import this[/code]
hk

Sonntag 13. Februar 2005, 23:37

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
hk

Sonntag 13. Februar 2005, 23:43

was wird mit modul this importiert? ich hoffe die Frage ist nicht zu peinlich :oops:
Gruß
hk
XT@ngel
User
Beiträge: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Sonntag 13. Februar 2005, 23:53

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
Zuletzt geändert von XT@ngel am Sonntag 13. Februar 2005, 23:54, insgesamt 1-mal geändert.
BlackJack

Sonntag 13. Februar 2005, 23:53

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

Montag 14. Februar 2005, 00:50

danke für den Hinweis Andreas, ich bin noch bei 2.2 sollte wohl mal updaten. Gruß hk
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 14. Februar 2005, 14:16

Am besten gleich mal auf 2.4, das hat noch einige nette Gimmicks :)

Und schlafen? Nein, warum auch?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 14. Februar 2005, 17:05

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
[code]#!/usr/bin/env python
import this[/code]
Antworten