Seite 1 von 1
csv einlesen und in listbox einfügen
Verfasst: Samstag 7. September 2019, 10:30
von Streifenhase1
Ich lese eine .csv ein. Diese wird in Spalte 1 nach einen Begriff durchsuchen.
ich möchte nun alle Zeilen aus Spalte 2, die in Spalte 1 den gesuchten Begriff beinhalten in einer listbox anzeigen.
Code: Alles auswählen
Komponente = "Test"
with open('Test.csv') as CSV_Störungen:
StörungenCSV = csv.reader(CSV_Störungen, delimiter=";")
for row in StörungenCSV:
if Komponente in row[0] :
print (row[1])
Störung_Liste = row[1]
for Störung in Störung_Liste:
Störungen_List.append(Störung)
self.Störungen_List_Box.insert(0,Störung)
die Print ausgabe ist: xxxdefekt
yyydefekt
also die Wörter werden richtig wiedergegen
wenn ich dieses jetzt in die Listbox einbinde erscheinen die Buchstaben untereinander. (jeder Buchstabe ist eine Auswahl)
Könnt ihr mir helfen die "Störung_Liste" so zu Formatieren das die Begriffe untereinander in der Listbox angezeigt werden.
Re: csv einlesen und in listbox einfügen
Verfasst: Samstag 7. September 2019, 10:40
von Streifenhase1
OK erst stundenlang nicht zum ziel gekommen, dann.....
habe es jetzt so gelöst.
Re: csv einlesen und in listbox einfügen
Verfasst: Samstag 7. September 2019, 11:39
von __blackjack__
@Streifenhase1: Das ist keine Lösung sondern noch umständlicher als eh schon ist. `Störung_Liste` ist nämlich gar keine Liste sondern eine Zeichenkette und Du hast da dann eine Schleife drüber geschrieben welche die einzelnen Buchstaben in die Listbox eingefügt hat statt einfach die Zeichenkette als ganzes einzufügen.
Selbst wenn man aus einer Zeichenkette eine Liste mit dieser Zeichenkette machen wollte, wäre ``[zeichenkette]`` wesentlich einfacher als ``zeichenkette.splitlines()`` und auch robuster, denn wenn `zeichenkette` irgendwann einmal einen Zeilenumbruch enthalten sollte, wird's komisch.
Namen schreibt man in Python klein_mit_unterstrichen. Grunddatentypen haben in Namen nichts verloren – schon gar nicht wenn sie nicht einmal stimmen. Statt magischer Indexwerte würde ich die beiden Spaltenwerte an sinnvolle Namen binden.
Bei Textdateien sollte man immer eine explizite Kodierung angeben.
Ungetestet:
Code: Alles auswählen
gesuchte_komponente = "Test"
with open("Test.csv", encoding="utf-8") as stoerungen_datei:
stoerungen = list()
rows = csv.reader(stoerungen_datei, delimiter=";")
for komponente, stoerung in rows:
if gesuchte_komponente in komponente:
print(stoerung)
self.stoerungen_listbox.insert(0, stoerung)
Re: csv einlesen und in listbox einfügen
Verfasst: Samstag 7. September 2019, 22:42
von Streifenhase1
Danke klappt. bekomme es jetzt nur leider nicht sortiert.
sonst habe ich es immer so gemacht.
und dann hätte ich noch eine Frage... ich habe nun 3 Listbox wenn ich in der 1. und dann in der 2. und zum schluss in der 3. nacheinander etwas auswähle hätte ich gern das die Auswahl Markiert bleibt.
Re: csv einlesen und in listbox einfügen
Verfasst: Sonntag 8. September 2019, 11:35
von Sirius3
Was hindert Dich, erst alles in einer Liste zu sammeln, dann zu sortieren und erst danach alles in die Listbox zu schreiben?
Re: csv einlesen und in listbox einfügen
Verfasst: Sonntag 8. September 2019, 12:11
von Streifenhase1
ich sag mal offen "Unwissenheit"
Code: Alles auswählen
with open('Data/störungen.csv') as stoerungen_datei:
reader = csv.reader(stoerungen_datei, delimiter = ";")
stoerungen = list()
data = [[row[0], row[1], row[2], row[3], row[4], row[5]] for row in reader]
for stoerungen in data:
self.Archiev_Störungen_Listbox.insert(0,stoerungen)
das währe der Code
stoerungen sollen nach row[0] sortiert sein
eigentlich sollen zwischen den row´s ein zwischenraum in der Listbox sein wenn ich diesen aber mit Leerzeichen mache ist eine Klammer in der Listbox.
Re: csv einlesen und in listbox einfügen
Verfasst: Sonntag 8. September 2019, 17:18
von Streifenhase1
Hab es jetzt so einigermaßen hinbekommen
noch was.
und zwar möchte ich aus der excel datei nur die letzten 10 zeilen auslesen und in die Listbox eintragen.
Code: Alles auswählen
data = [[row[0], row[1],row[2],row[3], row[4], row[5]] for row in reader]
row_format = "{:<12} {:<12} {:<12} {:<12} {:<20} {:<20} "
for items in data:
self.Archiev_Störungen_Listbox.insert(0, row_format.format(*items, sp=" "*1))
Re: csv einlesen und in listbox einfügen
Verfasst: Sonntag 8. September 2019, 19:03
von Sirius3
In Deinem Format-String gibt es gar kein `sp`. Und * 1 macht ziemlich wenig.
Und bei CSV-Dateien (hat nichts mit Excel zu tun) kann man nur die ganze Datei lesen und nur die letzten 10 Zeilen behalten.
Re: csv einlesen und in listbox einfügen
Verfasst: Sonntag 8. September 2019, 22:59
von __blackjack__
Dabei kann `more_itertools.tail()` hilfreich sein.
``[row[0], row[1],row[2],row[3], row[4], row[5]]`` ist etwas umständlich für ``row[:6]``