Seite 1 von 1

Schreiben einer CSV, warum gleicher Inhalt mehrmals in Datei

Verfasst: Sonntag 1. März 2015, 19:34
von alltogo
Hallo,

wie ihr unschwer erkennen könnt bin ich ein absoluter Anfänger welcher dazu noch ratlos ist...

Ich möchte eine CSV mit datenset´s füttern, das klappt auch schon allerdings wenn ich die CSV öffne habe ich die eingegebenen Daten zig mal untereinander stehen....

Hier der Code:

Code: Alles auswählen

__author__ = 'Mike'

import csv

def add_column():

    print("Add a new column, follow the introduction....")

    name_column = str(input("Enter the name of the new column: "))
    type_column = str(input("Enter the type ot the new column (e.g. RP,NP,SAX,WAX,CIRAL: "))
    lenght_column = input("Enter the lenght of the new column [mm]: ")
    dia_column = input("Enter the diameter of the new column: ")
    porsize_column = input("Enter the poresize of the new column: ")
    particlesize_column = input("Enter the particlesize of the new column [µm]: ")


    dataset_column= '%s,%s,%s,%s,%s,%s' %(name_column,type_column,lenght_column,dia_column,porsize_column,particlesize_column)


    fobj = open("column.csv", "w")
    for engl in dataset_column:
        fobj.write( dataset_column + "\n")
    fobj.close()


add_column()
und hier das was in die CSV geschreiben wird.
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
test,rp,100,5,100,3
So, jetzt frag ich mich natürlich warum dort so viele gleiche Datensätze auftauchen und nicht nur eine.

gruß
Mike

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Sonntag 1. März 2015, 19:45
von Üpsilon
Hab zwar noch nie i.was mit CSVs programmiert, aber es könnte daran liegen, dass fobj.write() in ner Schleife steht. Für CSVs gibts übrigens ein Modul in der Stdlib.

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Sonntag 1. März 2015, 19:49
von Sirius3
@alltogo: warum importierst Du csv, wenn Du es nicht benutzt?
Was machst Du mit der for-Schleife? Was steht in engl und was in dataset_column?

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Sonntag 1. März 2015, 19:53
von alltogo
Ah klar danke für den Hint Üpsilon :)
so funktionierts,

Code: Alles auswählen

 
 fobj = open("Column.csv", "w")
 fobj.write( dataset_column + "\n")
 fobj.close()
was mir immer noch nicht klar ist warum er diese Anzahl an Einträgen macht, logischer wäre doch das er gar nicht mehr aufhört Einträge zu schreiben...

Danke nochmal :D

EDIT:
Hab das mit der for schleife jetzt rausgeschmissen und import csv auch, da wie du sagtest nicht benötigt wird. Hatte das aus einem Beispiel.

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Sonntag 1. März 2015, 20:57
von pillmuncher
@alltogo: Genau, jetzt hast du es. Wundere dich aber nicht, wenn dein Zahnarzt demnächst zu dir sagt: "Ich weiß nicht genau welcher Zahn kaputt ist, deshalb schlage ich vor, einen nach dem anderen zu ziehen, und dann zu schauen, ob es nicht mehr weh tut."

Anders ausgedrückt: Programmieren geht nicht so, dass man blindlings irgendwas hinschreibt und wieder aus dem Programm rausnimmt bis es irgendwann zu funktionieren scheint. Würdest du dich in ein Flugzeug setzen wollen, dessen Software so geschrieben wurde? Oder auch nur in ein Auto?

Richtig programmieren geht so: Man versucht das zu lösende Problem zu verstehen und gibt ihm eine formale Darstellung in einer Programmiersprache. Zum Verstehen eines Problems gehört das Zerlegen in Teilprobleme, wie zB. das Verarbeiten und Erzeugen einer CSV-Datei. Da das ein immer wiederkehrendes (Teil-)Problem ist, steht zu vermuten, dass du nicht der erste Mensch auf der Welt bist, der das lösen muss. Vermutlich gibt es also schon eine Lösung dafür. Und du hattest sie ja schon gefunden und sogar importiert, nämlich das csv-Modul aus der Standardbibliothek. Warum verwendest du es denn nicht?

Außerdem erzeugt add_column() bei dir keine Column (d.h. Spalte), sondern eine Row (d.h. Zeile). Die Funktion sollte also add_row() heißen.

In deiner CSV-Datei wirst du übrigens immer nur die zuletzt gespeicherte Zeile finden. Schau dir mal deinen Code an und versuche herauszufinden, warum das so ist. Kleiner Tipp: folge diesem Link und lies nach, was open(..., 'x') macht.

Hier eine halbwegs brauchbare - aber immer noch suboptimale - Version mit einer kleinen Erweiterung am Ende:

Code: Alles auswählen

import csv

CSV_FILE_NAME = 'rows.csv'
FIELD_NAMES = [
    'name',
    'type',
    'lenght',
    'dia',
    'porsize',
    'particlesize',
]

def init():
    with open(CSV_FILE_NAME, 'w') as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=FIELD_NAMES)
        writer.writeheader()

def add_row(filename):
    print('Add a new row, follow the introduction....')
    record = dict(
        name=input('Enter the name of the new row: '),
        type=input('Enter the type ot the new row (e.g. RP,NP,SAX,WAX,CIRAL: '),
        lenght=input('Enter the lenght of the new row [mm]: '),
        dia=input('Enter the diameter of the new row: '),
        porsize=input('Enter the poresize of the new row: '),
        particlesize=input('Enter the particlesize of the new row [µm]: '),
    )
    with open(CSV_FILE_NAME, 'wa') as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=FIELD_NAMES)
        writer.write(record)

init()
for _ in range(int(input('Enter the number of rows you want to add: '))):
    add_row()
Ungetestet.

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Dienstag 3. März 2015, 12:14
von alltogo
Hallo pillmuncher

erst einmal Entschuldigung das die Antwort so lange dauerte. Du hast dir mit der Beantwortung meiner Frage sehr viel mühe gegeben, Danke hierfür.

Mir ist durchaus bewusst das man zuerst das Problem analysiert und dann die Teil-Lösungen ausarbeitet. Allerdings möchte ich Python ja lernen und dies fällt mir am einfachsten wenn ich das an "echten Projekten" erlernen wobei mir die Try/Error Taktik hilft, denn jedes Problem muss hinterfragt werden und endet darin das ich mir wissen anlese.
Außerdem erzeugt add_column() bei dir keine Column (d.h. Spalte), sondern eine Row (d.h. Zeile). Die Funktion sollte also add_row() heißen.

Da hast du ja recht, aber mit add_column() meine ich nicht eine Spalte hinzuzufügen es geht hier um HPLC Säulen ( Chromatographie ) deren Säulen Parameter ( 200mm lang, 4mm Durchmesser, etc. ) in die Datei geschrieben werden sollen um nachher mit diesen Werten Berechnungen durchzuführen.


Nichts desto trotz hast du mir klar gemacht das ich mich etwas mehr mit den "Kleinigkeiten" befassen sollte, hierfür habe ich mich jetzt bei der Codeacademy angemeldet um das ganze von Anfang an zu erlernen, danke außerdem für den Link, zusätzliche Literatur habe ich mir auch schon besorgt.

Ich werde jetzt erst einmal Basics vertiefen und nicht Stupide aus Beispielen Copy Pasten :)

gruß
alltogo

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Dienstag 3. März 2015, 13:32
von pillmuncher
alltogo hat geschrieben:
Außerdem erzeugt add_column() bei dir keine Column (d.h. Spalte), sondern eine Row (d.h. Zeile). Die Funktion sollte also add_row() heißen.
Da hast du ja recht, aber mit add_column() meine ich nicht eine Spalte hinzuzufügen es geht hier um HPLC Säulen
Dann würde ich das add_hplc_column() nennen.

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Dienstag 3. März 2015, 14:12
von BlackJack
@alltogo: Ich denke es geht hier im speziellen auch darum warum die rausgeworfene Schleife falsch war. Und Du solltest auch herausfinden wie viele Zeilen die geschrieben hat. Also wovon die Anzahl der geschriebenen Zeilen abhängt.

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Dienstag 3. März 2015, 18:46
von alltogo
@pillmuncher: Okay, Variablen eindeutiger benennen, merke ich mir
@BlackJack:
Ich habe das Programm paar mal durchlaufen lassen und immer eine neue Datei angelegt, das ich vergleichen kann, die Anzahl an Einträgen ändert sich mit der Anzahl an Zeichen :K Aber mir ist nicht klar warum er mal 11 Zeilen mach und mal 19 Zeilen usw.

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Mittwoch 4. März 2015, 08:07
von thorius
alltogo hat geschrieben:
was mir immer noch nicht klar ist warum er diese Anzahl an Einträgen macht, logischer wäre doch das er gar nicht mehr aufhört Einträge zu schreiben...
vergleiche doch mal die Anzahl der Einträge mit der Länge von dataset_column. Dann kommst du sicher drauf.

--
Thomas

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Donnerstag 5. März 2015, 18:30
von alltogo
thorius hat geschrieben:
alltogo hat geschrieben:
was mir immer noch nicht klar ist warum er diese Anzahl an Einträgen macht, logischer wäre doch das er gar nicht mehr aufhört Einträge zu schreiben...
vergleiche doch mal die Anzahl der Einträge mit der Länge von dataset_column. Dann kommst du sicher drauf.

--
Thomas
Jetzt fällt es mir wie schuppen von den Augen ( glaube ich), ich hatte so was vermutet aber bei meiner Zählerei waren immer 5 zu wenig. Das Komma wird mitgezählt !? Also mach er so viele Wiederholungen wie es ZEICHEN sind nicht Werte.

Re: Schreiben einer CSV, warum gleicher Inhalt mehrmals in D

Verfasst: Donnerstag 5. März 2015, 19:46
von BlackJack
@alltogo: Die Werte in diesem Fall sind ja Zeichen.