Forum: PC-Programmierung CSV Datei in Python Struktur einlesen


von Czupython (Gast)


Lesenswert?

Hallo,
Ich habe folgenden CSV Datei

1
raumname;raumid;raumiconstring;deviceid;deviceactualvalueid;devicemaxvalue;deviceminvalues;swipeleftactionstrinq;swiperightactionstring;flyinactionstring;flyoutactionstring;rotateleftactionstring;rotaterightactionstring;deviceiconstring


Und möchte diese in Python in folgende Struktur (Achtung c Syntax 
einlesen:
1
struct raum raeume[]
2
3
struct raum
4
5
{
6
Char raumname[]‚
7
char raumid[],
8
char raumiconstring[]‚
9
10
struct device devices[]
11
12
13
}
14
15
struct device
16
17
( 
18
char deviceid[],
19
char deviceactualvalueid[],
20
double devicemaxvalue,
21
double deviceminvalue,
22
char swipeleftactionstrinq[]‚
23
char swiperightactionstring[]‚
24
char flyinactionstring[],
25
char flyoutactionstring[]‚
26
char rotateleftactionstring[]‚
27
char rotaterightactionstring[]
28
char deviceiconstring []
29
}



Gibt's es jmd der mir helfen könnte, bin leider bei Python relativ 
schlecht.....

Danke

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Hi, es sieht wohl in etwa so aus in Python:
1
import csv
2
3
...
4
5
with open('deineDatei.csv') as f:
6
    reader = csv.reader(f, delimiter=';')

Dann nach C parsen und fertig.

von Czupython (Gast)


Lesenswert?

Das lesen der CSV Datei war jetzt logisch aber was meinst du mit nach c 
parsen?

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Ach du hast das nur in C Syntax aufgeschrieben. Wenn du nur nach Python 
möchtest war es das ja schon.

von Czupython (Gast)


Lesenswert?

Ja hatte das nur in c Syntax aufgeschrieben....wie kann ich dann auf die 
einzelnen Elemente zugreifen wenn es mehrere Zeilen gibt?


Und wenn der gleiche raumname öfters Auftritt will ich alle devices 
darunter haben um zugreifen zukönnen bzw.alle devices pro Raum 
aufzulisten.


Zugriff bsp
1
Print Raum[0].raumname 
2
3
For{Raum[0]}
4
List all device
5
End for

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Nunja, du mußt dir einen Python Datentyp überlegen in welche du die 
Daten packen möchtest. Es gibt u.a.:

- Lists are ordered sequences of values.
- Tuples are ordered, immutable sequences of values. <-- bietet sich 
evtl an
- Sets are unordered bags of values.
- Dictionaries are unordered bags of key-value pairs.

Dazu kannst du durch die Einträge iterieren mit
1
for row in reader:
2
   MachWasMitRow

Zum csv einlesen gibt es mit Sicherheit aus ausführliches Bsp. (ich habe 
nicht danach gesucht)

: Bearbeitet durch User
von Andy (Gast)


Lesenswert?

csv und struktur passen nicht 1:1 zusammen. entweder packst du etwas 
programmier- und Zuordlogik zwischen csv-lesen und Struktur-schreiben*, 
oder Du packst diese Struktur schon flach in die CSV - halt mit mit 
Redundanzen:
Je csv-Zeile beschreibst du vollständig ein einzelnes Gerät- inkl der 
dazugehörigen Raumdaten.

Egal wie, nun musst du dir einen Kopf machen, welchen Weg du nimmst und 
wie du da langkommst.*

Da wir keine hausaufgaben vorkauen, bleibe ich mal schön ungenau.

von Martin H. (marrtn)


Lesenswert?

Daten in structs einlesen wird mit Python schwierig, da es keine structs 
gibt. Man kann Klassen dafür verwenden, muss man aber nicht.
Für CSV habe ich gerne den dictreader 
(https://docs.python.org/2/library/csv.html#csv.DictReader) genommen.

Inzwischen nutze ich aber kein CSV mehr sondern lese/schreibe direkt 
xlsx mittels openpyxl. Mit den xlsx können die Kollegen dann doch besser 
umgehen als mit csv.

von Czupython (Gast)


Lesenswert?

Ich kann ja ein Liste von tuples erstellen:
1
list_of_tuples = [(1,2),(3,4)]

Wie kann ich dann auf die einzelnen tupels zugreifen? Bzw tuple 
elemente?

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Zugreifen kannst du so:
1
myTuple = ('raumname', 'raumid', 'raumiconstring', 'deviceid');
2
3
print "First: ", myTuple[0]
4
print "Second+Third: ", myTuple[1:2]

Bevor du nun aber jedes Detail deiner Aufgabe hier rauskitzelst, bemüh' 
doch einfach Literatur oder Google um dir ein paar Grundlagen 
anzueignen. Die "Dive into Python"-Reihe fand ich zum Start sehr 
angenehm zu lesen. Wenn du dann wirklich ein Problem hast und nicht 
weiter kommst, poste deinen konkreten Code.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.