maiksv
Goto Top

Einzelne Spalten in einer CSV bearbeiten (Python)

Guten Morgen,

und zwar habe ich folgende Frage. Ich habe hier eine CSV die folgendermaßen aufgebaut ist:

1 Name,"Gruppen"  
2 Benutzername,"CN=Gruppenname,OU=beispiel,DC=beispiel,DC=beispiel CN=Gruppenname,OU=...  
3 Benutzername,"CN=Gruppenname,OU=beispiel,DC=beispiel,DC=beispiel CN=Gruppenname,OU=...  

In etwa so ist sie aufgebaut nur mit etwas mehr Einträgen.
Meine Problem was ich jetzt allerdings habe ist, dass ich gerne in der Spalte "Gruppen" nur jeweils die Einträge mit "CN" also die Gruppennamen hätte. Ich habe jedoch leider keinen Weg gefunden innerhalb einer Spalte die CSV zu bearbeiten. Klar ich kann jeweils die Namen oder die gesamte spalte "Gruppen" bearbeiten ich möchte aber in der Spalte Gruppen eben nur die einzelnen Einträge rausfiltern. Gibt es vielleicht eine Möglichkeit jeweils das was mit CN beginnt auszulesen?

Das ist der Code den ich soweit erstmal benutz habe um die CSV überhaupt erstmal einzulesen:

import csv

with open('NameDerCsv.csv', newline='',encoding= 'utf-8') as file:  
    csvreader = csv.reader(file)
    for row in csvreader:
        print(row, "\n")  

Content-ID: 5052112267

Url: https://administrator.de/forum/einzelne-spalten-in-einer-csv-bearbeiten-python-5052112267.html

Ausgedruckt am: 22.12.2024 um 11:12 Uhr

4863114660
Lösung 4863114660 22.12.2022 aktualisiert um 12:17:27 Uhr
Goto Top
import csv, re
filepath = 'D:\\Pfad\\zur\\NameDerCsv.csv'  
with open(filepath, newline='',encoding= 'utf-8') as file:  
    csvreader = csv.reader(file,delimiter=",")  
    next(csvreader)
    for row in csvreader:
        groups = ""  
        matches = re.findall('CN=(.*?)(?=,(OU|DC))',row[1],flags=re.I|re.M)  
        if matches != "":  
            groups = ','.join("%s" % match for match in matches)      
        print("Gruppen von User '" + row + "' : " + groups)  
https://docs.python.org/3/library/re.html

Gruß S.
MaikSV
MaikSV 22.12.2022 um 11:39:54 Uhr
Goto Top
matches = re.findall('CN=(.*?)(?=,(OU|DC))',row[1],flags=re.I)  
                                                                  ~~~^^^
IndexError: list index out of range

Diese Fehlermeldung kam auch zuvor schon wenn ich versucht habe irgend ein Element ausgeben zu lassen.
Das kann doch kaum out of range sein oder? Die csv hat mehrere hundert Zeilen
4863114660
4863114660 22.12.2022 aktualisiert um 12:09:04 Uhr
Goto Top
Diese Fehlermeldung kam auch zuvor schon wenn ich versucht habe irgend ein Element ausgeben zu lassen.
Dann machst du was grundlegend falsch oder deine CSV ist anders formatiert als das was du hier postest. Klappt hier mit folgender Demo-CSV einwandfrei.
Du kannst ja noch mit if prüfen ob ein Match gefunden wurde oder nicht (habe ich oben noch ergänzt).

Das ist meine Test-CSV
"Name","Gruppen"  
"BenutzernameA","CN=GruppennameA,OU=beispiel,DC=beispiel,DC=beispiel CN=GruppennameB,OU=beispiel,DC=beispiel,DC=beispiel"  
"BenutzernameB","CN=GruppennameC,OU=beispiel,DC=beispiel,DC=beispiel"  
"BenutzernameC",""  

Ergebnis in der Konsole.
Gruppen von User 'BenutzernameA' : GruppennameA,GruppennameB  
Gruppen von User 'BenutzernameB' : GruppennameC  
Gruppen von User 'BenutzernameC' :   
Works as designed ...

Tschö und frohes Fest 🎄.
MaikSV
MaikSV 22.12.2022 um 12:12:21 Uhr
Goto Top
Alles klar dann schau ich nochmal.
Vielen dank schonmal und schöne Feiertage