Seite 1 von 1
Label-Strings von einer Datei importieren
Verfasst: Freitag 14. April 2017, 08:37
von stefanxfg
Hallo,
ich habe viele Labels, welche ich benennen muss. Dazu möchte ich eine Text- oder CSV-Datei verewenden um meine Labels zu benennen. ABer das Ergebnis ist noch nicht zu gut. Ich kann keine Sonderzeichen (ä,ö, ü) verwenden und ich habe noch {} in jedem Label.
Code: Alles auswählen
arr = []
with open('conf.csv', 'r') as conffile:
csvreader = csv.reader(conffile)
arr = list(csvreader)
und später wird so zugegriffen.
Code: Alles auswählen
for c in range(0,AA):
self.labels4.append(Label(self.t4.sub_frameC, text=arr[c], relief=SUNKEN))
Wisst ihr woran das liegt?
Grüße von Stefan
Re: Label-Strings von einer Datei importieren
Verfasst: Freitag 14. April 2017, 09:02
von Sirius3
@stefanxfg: hast Du denn eine csv-Datei? Und was steht in den Spalten außer dem Labeltext? Die komischen Zeichen kommen daher, dass Du Listen statt Strings als text verwendest. »arr« ist ein schlechter Name für Informationen über Labels, die Initialisierung mit einer leeren Liste ist überflüssig. Wenn man anfängt, Attribute durchzunummerieren, will man eigentlich ein Datenstruktur verwenden, was soll die 4 denn bei labels4 bedeuten. t4 ist auch ein nichtssagender Name und sub_frameC hört sich auch so an, als ob Du nicht wüßtest, für was der Frame eigentlich da ist. In Python iteriert man nicht über einen Index, wenn man gleich die Listenelemente in der for-Schleife benutzen könnte. Eingerückt wird immer mit 4 Leerzeichen pro Ebene.
Code: Alles auswählen
with open('conf.csv', 'r') as conffile:
csvreader = csv.reader(conffile)
label_infos = list(csvreader)
for text, restliche, spalten in label_infos:
self.labels4.append(Label(self.t4.sub_frameC, text=text, relief=SUNKEN))
Re: Label-Strings von einer Datei importieren
Verfasst: Freitag 14. April 2017, 10:25
von stefanxfg
Danke erst einmal für deinen Beitrag. Ich nehme an, dass man von der CSV immer nur Text einlesen kann. Ich weiß nicht, wie ich das als String angeben soll.
Insgesamt ist es so dass ich erst einmal meine Labels mittels dieser Datei beschriften möchte. Später sollen auch Entry-Werte darin enthalten sein. Ebenfalls gewisse Programmeinstellinformationen sollen mit abgespeichert werden.
Ich möchte dieses Dateiformat zum Programmformat machen. Also Einlesen dieser Datei und auch Speichern von Input-Werten.
Das Snippet ist nicht aussagekräftig, das ist mir klar. Daher entschuldige bitte die möglicherweise nicht sinnfällige Benennung.
Re: Label-Strings von einer Datei importieren
Verfasst: Freitag 14. April 2017, 12:44
von stefanxfg
stefanxfg hat geschrieben:Danke erst einmal für deinen Beitrag. Ich nehme an, dass man von der CSV immer nur Text einlesen kann. Ich weiß nicht, wie ich das als String angeben soll.
Insgesamt ist es so dass ich erst einmal meine Labels mittels dieser Datei beschriften möchte. Später sollen auch Entry-Werte darin enthalten sein. Ebenfalls gewisse Programmeinstellinformationen sollen mit abgespeichert werden.
Ich möchte dieses Dateiformat zum Programmformat machen. Also Einlesen dieser Datei und auch Speichern von Input-Werten.
Das Snippet ist nicht aussagekräftig, das ist mir klar. Daher entschuldige bitte die möglicherweise nicht sinnfällige Benennung.
Ich habe außerdem den Import über ein Textfile ausprobiert. Dabei fügt er mir in die Labels den Text von der Zeile und eine Leerzeile ein. Keine Ahnung warum das so ist.
Code: Alles auswählen
with open('Fahrzeug_conf.csv', 'r') as conffile:
vehiclearr = conffile.readlines()
Re: Label-Strings von einer Datei importieren
Verfasst: Freitag 14. April 2017, 15:59
von Sirius3
@stefanxfg: Du bekommst Leerzeilen, weil jede Zeile einer Datei mit einem Zeileendezeichen beendet wird ('\n'). Wenn Du das nicht willst, solltest Du es entfernen (.strip()). Schau Dir doch mal an, was Du denn da machst und versuche zu verstehen, warum welche Typen und Werte in den Variablen stehen.
So wie Du die Information, die Du in einer Datei speichern willst, beschreibst, ist csv wahrscheinlich das falsche Dateiformat.
Re: Label-Strings von einer Datei importieren
Verfasst: Samstag 15. April 2017, 08:13
von stefanxfg
Hallo nocheinmal.
Ich möchte das Thema des "richtigen" Datei-Formats noch einmal aufgreifen. Vielleicht kannst du mir Tipps aus deiner Erfahrung geben.
1. Zunächst habe ich, wie beschrieben, eine Art tabellaisches Blatt aus Label und Entry. Mehrere Tabellen mit unterschiedlich vielen Einträgen.
Die Erstellung dieser Tabelle läuft bei Programmstart. Ich möchte die Inhalte der Labels aus einer Datei beziehen, welche sich im Installationspfad befindet. Es könnte eben auch eine Txt-Datei sein. Die Labels sollen nur vom Entwickler veränderbar sein. Das heißt, sie sind für den User immer fest vorgegeben. Die Datei soll vom User nicht anwählbar sein.
2. Die oben benannten Entrys mehrerer Tabellen stellen die Datenbehandlung dar. Diese sollen in ein Datei-Format abgelegt werden und bei Neustart wieder importiert werden. Dabei denke ich auch daran, Programmeinstellinformationen zu hinterlegen. Ich meine zum Beispiel Checkbutton-Informationen. Also ob der Haken bereits gesetzt war oder nicht.
Die Datei soll vom User anwählbar sein, so dass er die Datei öffnen und auch speichern kann.
3. Ich gedenke in Zukunft auch Datenbanken mit einzubeziehen. Bei bestimmten Tabellen sollen es möglich sein, die Daten entweder aus der Eingabedatei oder aus der Datenbank zu entnehmen.
So wie ich es sehe, kann man das in fast jedem Format machen. Aber ich bin gespannt, wie es aus deiner Erfahrung aussieht. Am Ende des Programms mache ich Datenexporte. Ich denke auch an Excel.
Zu dem von mir anfänglich beschriebenen Problem habe ich wie folgt gelöst:
Code: Alles auswählen
with open('Label_conf.csv', 'r') as conffile:
Labelnamen = conffile.read().splitlines()
Re: Label-Strings von einer Datei importieren
Verfasst: Samstag 15. April 2017, 14:20
von BlackJack
@stefanxfg: Für strukturiertere Daten über einfache 2D-Tabellen hinaus bietet sich JSON oder YAML an. Für JSON gibt es ein Modul in der Python-Standardbibliothek.
Das der Benutzer nichts ändern kann wird schwierig insbesondere wenn er der Besitzer des Rechners ist. Ansonsten ist das etwas das man über die Zugriffsrechte des Betriebs- beziehungsweise Dateisystems regeln muss.
Eine CSV-Datei nicht mit dem `csv`-Modul, oder einem anderen Modul oder einer Funktion die auf CSV-Dateien ”spezialisiert” ist, zu verarbeiten, wirft die Frage auf ob es sich tatsächlich um eine CSV-Datei handelt. Du behandelst das jetzt als einfache Textdatei mit Zeilen und nicht als strukturierte 2D-Daten im CSV-Format.