Das Modul kann eigentlich auch mit gequoteten Einträgen umgehen. Wie sind sie denn gequotet? Kannst Du ein kleines Beispiel für solche Daten posten?hubiat hat geschrieben:wie kann ich eigentlich, wenn ich mit diesem csv modul arbeite, diesem sagen, dass ich bestimmte datensätze, welche gequotet sind, dennoch richtig bearbeite?!
hab derzeit anstelle der namensausgabe eine leerzeile in meinem ausgabe file! :-/
Frage zu einem Projekt
hab mir das nun alles nochmal angeschaut und ich bin draufgekommen, dass das mit dem csv modul zwar eine echt lässige lösung ist, aber ich das nun versuchen mag, selbst mit schleifen zu lösen!
wenn ich ein csv file dann einlese, muss ich es dann umwandeln in strings, diese dann einlesen und danach wieder zurücksetzen in den ursprünglichen zustand?! versteh ich das richtig?!
es sind einfach zu viele kriterien, welche ich erfüllen soll, um dieses beispiel/projekt zu lösen!
hätte hierfür vielleicht jemand einen lösungsansatz?!
danke schon im vorhinein!!!
wenn ich ein csv file dann einlese, muss ich es dann umwandeln in strings, diese dann einlesen und danach wieder zurücksetzen in den ursprünglichen zustand?! versteh ich das richtig?!
es sind einfach zu viele kriterien, welche ich erfüllen soll, um dieses beispiel/projekt zu lösen!
hätte hierfür vielleicht jemand einen lösungsansatz?!
danke schon im vorhinein!!!
Warum willst Du CSV Dateien selbst parsen, wenn es dafür schon ein Modul gibt, dass Dir die ganze Arbeit abnimmt? Gerade wenn Du sowieso noch eine Menge anderer Anforderungen erfüllen musst.
damit ich das mit den schleifen usw. besser verstehe! darum dachte ich mir, dass es eventuell besser wär!BlackJack hat geschrieben:Warum willst Du CSV Dateien selbst parsen, wenn es dafür schon ein Modul gibt, dass Dir die ganze Arbeit abnimmt? Gerade wenn Du sowieso noch eine Menge anderer Anforderungen erfüllen musst.
wenn ich das einmal verstehe, kann ich das mit dem modul ja immer noch machen, oder?!
Grundsätzlich ja, aber das mit dem quoten willst Du nicht selbst machen, glaub mir.
Ansonsten kann man einen einfachen CSV-Leser recht schnell zusammenbasteln. Ein Dateiobjekt ist "iterable", d.h. man kann einfach in einer ``for``-Schleife darüber gehen. Es werden die einzelnen Zeilen als Zeichenketten geliefert. Das Zeilenendezeichen ist dabei noch nicht entfernt. Das kann man mit der `lstrip()` Methode machen. Und mit der `split()`-Methode kann man eine Zeichenkette an bestimmten Zeichen zerlegen. Das war's auch schon.
Ansonsten kann man einen einfachen CSV-Leser recht schnell zusammenbasteln. Ein Dateiobjekt ist "iterable", d.h. man kann einfach in einer ``for``-Schleife darüber gehen. Es werden die einzelnen Zeilen als Zeichenketten geliefert. Das Zeilenendezeichen ist dabei noch nicht entfernt. Das kann man mit der `lstrip()` Methode machen. Und mit der `split()`-Methode kann man eine Zeichenkette an bestimmten Zeichen zerlegen. Das war's auch schon.
kann man das anhand eines "einfachen" beispieles, vielleicht sogar mit meinem vorzeigen, wie ich das angehen soll?!BlackJack hat geschrieben:Grundsätzlich ja, aber das mit dem quoten willst Du nicht selbst machen, glaub mir.
Ansonsten kann man einen einfachen CSV-Leser recht schnell zusammenbasteln. Ein Dateiobjekt ist "iterable", d.h. man kann einfach in einer ``for``-Schleife darüber gehen. Es werden die einzelnen Zeilen als Zeichenketten geliefert. Das Zeilenendezeichen ist dabei noch nicht entfernt. Das kann man mit der `lstrip()` Methode machen. Und mit der `split()`-Methode kann man eine Zeichenkette an bestimmten Zeichen zerlegen. Das war's auch schon.
wär sehr dankbar dafür!
Also folgende Datei als Grundlage:
Dateien sind in Python "iterable", das heisst man bekommt mit der `iter()` Funktion einen Iterator und deshalb kann man eine Datei in einer ``for``-Schleife benutzen.
Mit der `rstrip()` Methode kann man das Zeilenende-Zeichen entfernen und mit `split()` die Zeichenkette zerlegen:
Jetzt musst Du nur noch das Python-Tutorial durcharbeiten.
Code: Alles auswählen
$ cat test.csv
Max Mustermann;Mustermann;mm@muster.de;1234 56
Udo Überhacker;Überhacker;hacker@uebel.net;72554 2624
Code: Alles auswählen
In [15]: f = open('test.csv', 'r')
In [16]: it = iter(f)
In [17]: it.next()
Out[17]: 'Max Mustermann;Mustermann;mm@muster.de;1234 56\n'
In [20]: f = open('test.csv', 'r')
In [21]: for line in f:
....: print repr(line)
....:
'Max Mustermann;Mustermann;mm@muster.de;1234 56\n'
'Udo \xc3\x9cberhacker;\xc3\x9cberhacker;hacker@uebel.net;72554 2624\n'
Code: Alles auswählen
In [26]: a = 'Max Mustermann;Mustermann;mm@muster.de;1234 56\n'
In [27]: b = a.rstrip('\n')
In [28]: b
Out[28]: 'Max Mustermann;Mustermann;mm@muster.de;1234 56'
In [29]: b.split(';')
Out[29]: ['Max Mustermann', 'Mustermann', 'mm@muster.de', '1234 56']
hmmm...und wie mach ich das bei solchen Datensätzen zum beispiel?!
Name,Level,Type,Numerical Type,Size,Type Kind,Instance Kind,EP-Nr.,Offset,Type id,Flags
NewTypeInstance,0,Type,0,40,1,,184295,0,3,0
ENO,1,BOOL,9,1,128,2,184295,0,,0
UDINT,1,UDINT,16,4,128,8,184295,4,,0
UDINT1,1,UDINT,16,4,128,8,184295,8,,0
INT,1,INT,11,2,128,8,184295,12,,0
INT1,1,INT,11,2,128,8,184295,14,,0
ADD2,1,ADD_INT_N3,13,2,16,8,184295,16,4,0
OUT1,2,INT,11,2,128,2,184295,16,,0
ADD3,1,ADD_INT_N3,13,2,16,8,184295,18,4,0
mit dem csv modul ist es ja gegangen, dass ich nur die spalte angeben muss!
wie geht das dann mit den schleifen?!
Name,Level,Type,Numerical Type,Size,Type Kind,Instance Kind,EP-Nr.,Offset,Type id,Flags
NewTypeInstance,0,Type,0,40,1,,184295,0,3,0
ENO,1,BOOL,9,1,128,2,184295,0,,0
UDINT,1,UDINT,16,4,128,8,184295,4,,0
UDINT1,1,UDINT,16,4,128,8,184295,8,,0
INT,1,INT,11,2,128,8,184295,12,,0
INT1,1,INT,11,2,128,8,184295,14,,0
ADD2,1,ADD_INT_N3,13,2,16,8,184295,16,4,0
OUT1,2,INT,11,2,128,2,184295,16,,0
ADD3,1,ADD_INT_N3,13,2,16,8,184295,18,4,0
mit dem csv modul ist es ja gegangen, dass ich nur die spalte angeben muss!
wie geht das dann mit den schleifen?!
Wenn Du einen `csv.DictReader` selbst schreiben möchtest, dann wird es etwas aufwändiger. Dann musst Du die erste Zeile besonders behandeln, weil da die Namen der Spalten drin stehen und für die folgenden dann jeweils ein Dictionary mit diesen Namen und dem Zeileninhalt füllen.
Fang erst einmal mit einem "normalen" Reader an, der die Zeilen als Tupel oder Listen zurückgibt.
Fang erst einmal mit einem "normalen" Reader an, der die Zeilen als Tupel oder Listen zurückgibt.
hmmm....okay....werd ich versuchen!BlackJack hat geschrieben:Wenn Du einen `csv.DictReader` selbst schreiben möchtest, dann wird es etwas aufwändiger. Dann musst Du die erste Zeile besonders behandeln, weil da die Namen der Spalten drin stehen und für die folgenden dann jeweils ein Dictionary mit diesen Namen und dem Zeileninhalt füllen.
Fang erst einmal mit einem "normalen" Reader an, der die Zeilen als Tupel oder Listen zurückgibt.
einen normalen reader....
na...ich bin gespannt...wie lang ich dafür brauchen werde!