Seite 1 von 1
Wert in genau eine .csv-Zelle schreiben
Verfasst: Mittwoch 2. Mai 2018, 15:30
von Hans-Uwe
Hi,
gibt es eine einfache Funktion, mit der man z.B. eine Zahl ganz gezielt in eine bestimmte Zelle einer .csv schreiben kann? Auslesen klappt, andersrum stehe ich auf dem Schlauch.
Danke für eure Vorschläge!
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Mittwoch 2. Mai 2018, 16:12
von __deets__
Nein, du musst komplett einlesen, den Wert an der entsprechenden Stelle aendern, und die gesamte Datei wieder rausschreiben. Das ist konzeptionell auch nicht anders moeglich, weil das OS eine Datei als einen Strom von Bytes betrachtet, und keine Unterstruktur kennt.
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Mittwoch 2. Mai 2018, 18:08
von Hans-Uwe
Schade, ich habe gehofft es gäbe etwas schlankeres.

Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 12:20
von Hans-Uwe
So richtig komme ich nicht weiter..
Ich habe die .csv wie folgt eingelesen:
Code: Alles auswählen
import csv
dateihandler = open('test.csv')
inhalt = dateihandler.read()
werte = []
zeilen = inhalt.split('\n')
for i in range(len(zeilen)):
spalten = zeilen[i].split(';')
werte.append(spalten)
density = int(werte[3][3])
Jetzt komme ich mit den bekannten Tutorials aber nicht weiter. Ich habe mir vorgestellt mit "werte[1][1]=int(96)" die entsprechende Zelle zu ändern... Aber ich finde nicht heraus wie ich die csv dann wieder richtig abspeichern kann...
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 12:50
von pillmuncher
@Hans-Uwe: Hast du denn schon mal in der
Dokumentation der Python-Standard-Bibliothek nach
csv gesucht?
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 13:33
von Hans-Uwe
Ja, nur ist mir das zu kurz um es zu verstehen.
Ich bekomme imme die Fehlermeldung, dass in dem Objekt "csv" kein Modul "writer" vorhanden ist... Die Python-Version hier ist 2.7.3.
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 13:41
von __deets__
Lass mich raten - dein Skript heisst "csv.py"?
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 13:45
von Hans-Uwe
@__deets__: 100 Punkte. Klang für mich nach einem schnellen, einfachen Namen um das Skript zu testen.

Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 14:05
von Hans-Uwe
Ich habe es jetzt schonmal mithilfe eines einfachen Beispiels geschafft einen Wert in die bestehende csv zu schreiben. Nur wird mir bei meiner Lösung komplett die Formatierung verhunzt.
Code: Alles auswählen
dateihandler = open('Phosphor_Kennwerte.csv')
inhalt = dateihandler.read()
werte = []
zeilen = inhalt.split('\n')
for i in range(len(zeilen)):
spalten = zeilen[i].split(';')
werte.append(spalten)
werte[10][10] = 'hallo'
csv.writer(open('Phosphor_Kennwerte.csv', 'w')).writerows(werte)
Für jede nicht beschriebene Spalte pro Zeile wird ein Komma eingefügt, ohne die Spalten aufzutrennen. Ich habe doch die bestehende csv eingelesen und übernehme daraus ja auch die Formatierung, oder nicht? Wieso wird das so komplett über den Haufen geworfen?
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 14:21
von __deets__
Du solltest sowohl zum als auch auslesen das csv Modul verwenden, und fuer dessen reader und writer gibt es einen delimiter Parameter. Den musst du setzen, es gibt keine Magie, die irgendwie erraet, dass du mal was mit Semikola an einer anderen Stelle gemacht hast.
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 14:24
von Hans-Uwe
Jo, ich habs gerade nochmal anders probiert und hinbekommen. Für die Nachwelt:
Code: Alles auswählen
import csv
dateihandler = open('Phosphor_Kennwerte.csv')
inhalt = dateihandler.read()
werte = []
zeilen = inhalt.split('\n')
for i in range(len(zeilen)):
spalten = zeilen[i].split(';')
werte.append(spalten)
werte[0][1] = 'hallo'
with open('Phosphor_Kennwerte.csv', 'wb') as f:
writer = csv.writer(f, delimiter=';')
writer.writerows(werte)
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 14:53
von __deets__
Und Zeilen 4 - 14 kannst du durch
Code: Alles auswählen
with open(('Phosphor_Kennwerte.csv') as inf:
werte = list(csv.reader(inf, delimiter=";"))
ersetzen.
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 15:00
von Hans-Uwe
Ok, in meinem großen, entgültigen Skript habe ich das intuitiv getan. Nur in dem kleinen Test nicht.
Danke für die Hilfe!
Edit: Kurz zur Erklärung: In meinem eigentlichen Skript lese ich Stoffdaten aus, simuliere dann etwas skriptbasiert und lasse das Ergebnis in die gleiche Excel schreiben, aus der ich auch die Stoffdaten habe.
Edit2: Ups, das ist ja doch etwas anderes. Hab nicht genau hingeguckt. Ich brauche Zeile 4-14 aber aus oben genanntem Grund trotzdem.
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 15:28
von Kebap
Hans-Uwe hat geschrieben:Edit2: Ups, das ist ja doch etwas anderes. Hab nicht genau hingeguckt. Ich brauche Zeile 4-14 aber aus oben genanntem Grund trotzdem.
Aus welchem Grund? Die kurz gefasste Version sollte das gleiche Ergebnis liefern.
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 15:40
von Hans-Uwe
Naja, weil ich erst spezielle Parameter aus bestimmten Zellen der csv auslesen möchte.
Code: Alles auswählen
# read Phosphor Data
dateihandler = open('Phosphor_Kennwerte.csv')
inhalt = dateihandler.read()
werte = []
zeilen = inhalt.split('\n')
for i in range(len(zeilen)):
spalten = zeilen[i].split(';')
werte.append(spalten)
density = int(werte[3][3])
particleindex = float(werte[4][3])
size = int(werte[5][3])
minthresh = float(werte[6][3])
bluemin = float(werte[7][3])
bluemax = float(werte[8][3])
fluorescenttrans = int(werte[9][3])
scattertrans = int(werte[10][3])
power = int(werte[11][3])
Anschließend werden die Parameter an eine Simulationssoftware übergeben, es wird simuliert und ich lasse mir einen Ergebniswert zurückgeben. Dieser wird dann mit
Code: Alles auswählen
#write Data
werte[14][3] = flux
with open('Phosphor_Kennwerte.csv', 'wb') as f:
writer = csv.writer(f, delimiter=';')
writer.writerows(werte)
wieder in die entsprechende csv geschrieben.
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 15:49
von __deets__
Ja und? Mein Code bezieht sich lediglich auf das einlesen der Daten. Warum vertraust du *da* dem CSV-Modul nicht, aber spaeter beim schreiben :K
Re: Wert in genau eine .csv-Zelle schreiben
Verfasst: Donnerstag 3. Mai 2018, 15:55
von Hans-Uwe
Dann habe ich dich misverstanden und es dann auch (noch) nicht ausprobiert. Ich dachte du gehst davon aus, dass ich ausschließlich etwas gezielt in eine Zelle schreiben möchte. Dass dein Code für das einlesen zuständig ist habe ich nicht gecheckt..