Mehrere CSV Files in ein Python Programm importieren

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.
Antworten
MitschR
User
Beiträge: 3
Registriert: Sonntag 10. August 2014, 16:35

Hi,

ich schreibe mir gerade ein Python Programm zur Auswertung einiger Experimente. Da ich momentan an einer Stelle hänge und ich auch im Internet bis jetzt nichts gefunden habe was mir weitergeholfen hat, habe ich mir hier einen Account gemacht, um mein Problem zu schildern:
Im Prinzip muss ich, um mein Experiment auszuwerten, CSV files auswerten. An sich läuft das Programm auch gut. Ich kann ein CSV file einlesen und auswerten.
Dafür nutze ich folgende Befehlszeile:

Code: Alles auswählen

reader=csv.read(open("Beispiel1.csv", "rb"), delimiter = ",")
Danach wertet mein Programm, wie gesagt, die eingelesenen Daten aus. Nun ist es aber so, dass ich nicht 1 CSV file habe, sondern mehrere 100, die in dem Programm nacheinander ausgewertet werden sollen (und später miteinander verrechnet werden). Die Files unterscheiden sich im Namen nur anhand einer aufsteigenden Ziffer.
Das Problem wollte ich plump mit einer For-Schleife lösen. Das hat aber nicht geklappt. Weis jemand, wie man mehrere CSV files nacheinander einliest?

Danke schonmal im voraus. Ich hoffe die Beschreibung des Problems ist gut genug :P

Liebe Grüße
Michael
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!
MitschR hat geschrieben:Das Problem wollte ich plump mit einer For-Schleife lösen. Das hat aber nicht geklappt. Weis jemand, wie man mehrere CSV files nacheinander einliest?
Mit einer for-Schleife.

Wenn du das nicht hinbekommst, dann solltest du erstmal das Tutorial durcharbeiten. Das glob-Modul ist in diesem Fall ebenfalls hilfreich.
Das Leben ist wie ein Tennisball.
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Hallo,

kann es sein, dass das Problem daran liegt, dass du nach Durchlauf der For-Schleife das Ergebnis nicht so speicherst, dass es beim nächsten Schleifendurchlauf nicht überschrieben wird? Du schreibst ja, dass es bei einer Datei funktioniert. Sobald du das aber mit mehreren Dateien nacheinander machst, passt es nicht mehr.

mfg
BlackJack

@MitschR: Zur gezeigten Zeile noch der Hinweis, dass man Dateien die man öffnet, auch wieder schliessen sollte. Das Betriebssystem stellt einem Prozess nicht unbegrenzt viele Dateihandles zur Verfügung und die automatische Speicherverwaltung garantiert nicht das das Dateiobjekt sofort abgeräumt wird wenn es nicht mehr benötigt wird. Am besten verwendet man dafür die ``with``-Anweisung:

Code: Alles auswählen

    with open('Beispiel1.csv', 'rb') as csv_file:
        reader = csv.read(csv_file, delimiter=',')
        # do something with `reader`...
Benutzeravatar
darktrym
User
Beiträge: 785
Registriert: Freitag 24. April 2009, 09:26

Oder mit einer While Schleife welche im inneren den Dateinamen generiert. Den Zugriff/Verarbeitung hast du ja soweit geklärt.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
MitschR
User
Beiträge: 3
Registriert: Sonntag 10. August 2014, 16:35

Prinzipiell weis ich schon, wie man eine For-Schleife benutzt^^

Das Ding ist, dass ich nicht wirklich verstehe, wie das Einbinden von CSV Files funktioniert. Klar ich kann sagen, dass diese Programmzeile

Code: Alles auswählen

reader=csv.read(open("Beispiel1.csv", "rb"), delimiter = ",")
das macht und ich kann auch sagen was die einzelnen Teile davon bewirken, aber warum es funktioniert...keinen Schimmer.

Um das mit eine For-Schleife zu lösen müsste ich ja den Dateinamen iterieren lassen. Ungefähr so:

Code: Alles auswählen

for i in range(100):
reader=csv.read(open("Beispiel"i".csv", "rb"), delimiter = ",")
Dann könnte die importierte Datei ausgwertet werden und die nächste importiert werden. Allerdings wird "Beispiel"i".csv" niemals funktionieren.
BlackJack

@MitschR: Da müsste man jetzt wissen wie man Werte in Zeichenketten formatiert. Was in jedem Anfängertutorial stehen sollte.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

MitschR hat geschrieben:Allerdings wird "Beispiel"i".csv" niemals funktionieren.

Code: Alles auswählen

>>> 'Beispiel' + str(1)
'Beispiel1'
>>> 'Beispiel{}'.format(1)
'Beispiel1'
>>> for i in range(5):
	print('Beispiel{}.csv'.format(i))

Beispiel0.csv
Beispiel1.csv
Beispiel2.csv
Beispiel3.csv
Beispiel4.csv
MitschR
User
Beiträge: 3
Registriert: Sonntag 10. August 2014, 16:35

@ /me

Genau das war es was ich gebraucht habe. Auch danke an die anderen die sich so rege beteiligt haben. Ist an nem Sonntag abend nicht selbverständlich.
Antworten