Probleme bei Datei auslesen bzw. Inhalt anzeigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Wurde heute das erste mal damit konfrontiert und hatte früher nie solche Probleme.
Aber ich werde mich belesen, Danke :)
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Mal eine bescheidene Frage zur Formatierung meiner Ausgabe:

Ich hab meine Datei nun ausgelesen, das was ich brauch heraus gefiltert und mit append in eine liste gespeichert.
Wenn ich das ganze jetzt aber verwenden möchte hab ich zwischen jeden einzelnen Buchstaben oder Zahl ein Leerzeichen.
Kann man das irgendwie entfernen? Mit replace hab ich es bereits probiert aber das funktioniert leider nicht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

``replace`` sollte aber "funktionieren"! Vermutlich verwirfst Du den Rückgabewert?

Zeig uns doch mal den Aufbau der Datei, Deine Listendaten und wie Du es versucht hast!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Wenn ich das euch zeige steinigt ihr mich virtuell ^^

Code: Alles auswählen

f = open("/home/gast/Arbeitsfläche/Projekte/dicomserver.txt", "r", encoding="iso-8859-15")
        for nummer, zeile in enumerate(f):
            export_name.append(zeile)
name = []
        for dsatz in export_name[95]:
            name.append(dsatz)
        self.test = []
        self.test.append(name[22])
        self.test.append(name[23])
        self.test.append(name[24])
        self.test.append(name[25])
Das is aber noch in der Testphase aber so konnte ich genau die Zeile verwenden die ich brauche und danach hab ich die Zeile noch zerlegt und die das raus gefiltert was ich brauche.

Ich seh schon die virtuellen Steine fliegen :wink:


ps. hier der Versuch mit dem replace

Code: Alles auswählen

self.test= self.test.replace(" ", "")
AttributeError: 'list' object has no attribute 'replace'
Ganz normal Leerzeichen gegen "nichts" ersetzen.
Sirius3
User
Beiträge: 17778
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: hast Du Dir angeschaut, mit welchen Objekten Du hier arbeitest?
Was für einen Typ hat "name" und was steht drin?
Was für ein Typ ist "self.text" und was steht drin?
Wo hast Du Leerzeichen, und wo stören Dich die Leerzeichen?
Was macht Zeile 95 so besonders?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie sieht denn so eine Datei aus und *was* davon willst Du haben?

Deine Formatierung wirkt falsch - ist das ein Copy & Paste Fehler? Einrückungen spielen in Python ja eine wichtige Rolle! Nimm einfach vier Spaces und schon hast Du keine Probleme mehr (weder beim Bearbeiten in verschiedenen Editoren noch beim Posten hier ;-) )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Ratespiel mit Sirius3 :wink:

Zeile 95 is so besonders da der Name des Empfängers steht
Genauso für 96, 97 und 98 aber das is erst mal zweitrangig

Ich denke mal du willst auf String oder Integer hinaus?
Die Leerzeichen sehen so aus: O S X 1

Edit:

Hyperion hier im Forum is es gerade ein Copy & Paste fehler
BlackJack

@Kalli87: Beantworte doch einfach mal die Fragen. Welchen Wert und welchen Typ haben die angesprochenen Objekte. Überprüfe die Antworten auf die Fragen in dem Du Dir Werte und Typen ausgeben lässt. Wenn Du etwas anderes anderes antwortest als der Interpreter dann denke darüber nach wo und warum Du falsche Annahmen getroffen hast und wie es richtig aussehen müsste.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@BlackJack
Die Frage konnte ich einfach nicht beantworten aber ich denke mal ich lag richtig mit der Annahme das Siruis3 darauf hinaus wollte ob es sich um Integer oder um einen String handelt.
Ich bin dem nachgegangen hab es in einem String umgewandelt und alles replaced was ich nicht brauche und schon funktioniert es.
Sicherlich gibt es wieder eine elegantere Lösung als meine aber wie man so schön sagt: Viele Wege führen nach Rom :wink:
BlackJack

@Kalli87: Wieso kannst Du die Frage nicht beantworten? Du hast die Daten, Du hast das Programm, Du kannst Dir die gefragten Informationen doch ganz einfach ausgeben lassen‽

Und nein, das hat nichts mit Integern zu tun, und was immer Du da auf einer Zeichenkettenrepräsentation am Ende anstellst ist das nachträgliche hässliche zurechthacken von etwas was überhaupt nur besteht weil Du vorher schon etwas machst was keinen Sinn ergibt. Das hat an dieser Stelle schon nichts mehr mit ”unelegant” zu tun, das würde ich schlicht als Programmfehler ansehen.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@BlackJack: Gut dann erkläre mir mal bitte wie du einen Datei ausließt die ca. 250 Zeilen aus Symbolen, Buchstaben und Zahlen besteht und nur bestimmte Zeilen brauchst um weiter zu kommen bei deinem Vorhaben. Dann triffst du auf das gleiche Problem wie ich mit der Ausgabe.
Zeige mir einfach mal ein Stückchen Code wie du das ganze problem lösen würdest und erkläre mir bitte warum du es gerade so machst.
Sirius3
User
Beiträge: 17778
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: Programmieren hat nichts mit Raten zu tun. Wenn Du nicht weißt, welche Datentypen Du erzeugst, kannst Du auch nicht sinnvoll damit arbeiten. Wenn Du nicht weißt, was eine Variable enthält, kann man mit "print(type(variable))" z.B. ihren Typ ausgeben lassen. "name" ist bei Dir eine Liste. "self.test" auch. Das ist relativ leicht herauszufinden, weil sie mit "[]" initialisiert werden. Aber was steht in den Listen?
Beschreibe mal in Worten, was der Inhalt von "name" sein soll.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Na im "name" stehen halt die Sachen drinnen die ich mir aus der Datei geholt habe, in diesem Fall die Namen der Empfänger.
Und so is es auch.

Edit:
Nur sieht "name" so aus: 1010;EXPORT_NAME1;Zum OSX1
Und "self.test" so: OSX1
BlackJack

@Kalli87: Ohne zu wissen wie die Datei aufgebaut ist und welche Informationen daraus extrahiert werden sollen kann Dir *niemand* konkreten Quelltext dafür zeigen.

Darum geht es hier doch auch gar nicht. Du hast Quelltext gezeigt bei dem ganz offensichtlich etwas sehr unsinniges gemacht wird. Was dann später anscheinend zu Leerzeichen führt die da nicht wären, wenn am Anfang nicht schon die Daten falsch behandelt werden. Und statt da am Ende dann Leerzeichen zu entfernen, sollte man die vielleicht besser gar nicht erst einfügen. Dann bräuchte man keine Probleme lösen die man selber geschaffen hat.

Es ist ja okay das man Fehler macht oder Code nicht versteht, das geht jedem mal so. Was nicht geht ist das man weiss das man etwas nicht verstanden hat, das aber ignoriert und später am Ergebnis auf Zeichenkettenebene herumdoktort, statt den *eigenen*, selbst geschrieben Code tatsächlich zu verstehen. So kann man nicht programmieren, in dem man nur im Neben rumstochert und blind durch seinen Code stolpert, und dabei offenbar absichtlich fest die Augen verschliesst.

Code operiert mit Werten, diese Werte haben jeweils einen Typ, und der Typ bestimmt welche Operationen mit dem Wert möglich sind, und was das Ergebnis oder der Effekt davon ist. Und man muss, zumindest bei selbst geschriebenen Code, sagen können welchen Wert und Typ die jeweiligen (Zwischen)Ergebnisse haben. Denn nur dann kann man sinnvoll und gezielt Code entwickeln der aus gegeben Eingangswerten (zum Beispiel ein Pfad/Dateiname als Zeichenkette) zu dem gewünschten Endergebnis (Wert/Typ) führt. Wenn man das nicht sagen kann, wonach wählt man denn in jedem Zwischenschritt zum Ziel aus, welche Operationen man auf dem jeweiligen Zwischenwert(en) ausführt‽ Was hast Du Dir zum Beispiel bei den Zeilen 4 bis 6 gedacht? Welchen Wert/Typ hat `export_name` und welchen Wert/Typ hat demzufolge `name` nach diesen Zeilen? Und *warum* hast Du das so gemacht?
Sirius3
User
Beiträge: 17778
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: ist es nun so oder nicht, dass da Empfängernamen in "name" stehen?
Ganz offensichtlich enthalten "name" und "self.test" nicht das was Du hier behauptest, wenn Du den Quelltext, den Du hier gepostet hast, verwendest. Das sind nämlich Listen und Du hast Strings in Deinem Edit.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Was ich mir bei Zeile 4 und 6 gedacht habe? Na ich hab mir einfach eine leere Liste angelegt, hab diese dann mit der Zeile 95 befüllt und in Zeile 6 hab eine weitere leere Liste angelegt die ich dann mit den einzelnen Werten aus der vorhergehenden Liste befülle. (Das jetzt hier der Code ein Copy&Paste-Fehler is haben wir ja schon geklärt.)

Um auf deinen restlichen Text weiter ein zugehen fehlen mir eher gerade die Worte aber nicht weil ich beleidigt bin oder ähnliches sondern einfach weil ich nicht weiß was ich drauf antworten soll.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kannst Du uns nicht einmal Auszüge einer solchen Datei posten? (Bitte in die "neutralen" Code-Tags setzen!)

Irgend wie habe ich den Verdacht, dass das CSV-Dateien sind... und die kann man recht einfach parsen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@Sirius3
Is gut dann halt so damit du zufrieden bist
name: ['1', '0', '1', '0', ';', 'E', 'X', 'P', 'O', 'R', 'T', '_', 'N', 'A', 'M', 'E', '1', ';', 'Z', 'u', 'm', ' ', 'O', 'S', 'X', '1', '\n']
selft.test: ['O', 'S', 'X', '1']
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@ Hyperion
# DUMP
0101;MDCMDUMP;1
# posql 01XX
0201;HEIMAT;
0202;RC_PFAD;
0203;BINSH_PFAD;
# DICOM 02XX
0301;CDROM;
0302;DICOM_PFAD;
0303;LINK_DIR;
0304;DICOM_IMPORT;
0305;DICOM_IMPORT_EXT;
0306;KH_LINK_DIR;1
0307;KH_LINK_DIR;
0308;MAKE_LINK_MQUERY;1
0309;MQUERY_LINK_DIR;
0401;EXPORT_STATION1;befund1
0402;EXPORT_STATION2;befund2
0403;EXPORT_STATION3;befund3
0404;EXPORT_STATION4;befund4
0405;EXPORT_STATION5;befund5
0406;EXPORT_STATION6;befund6
# Backup
0420;EXPORT_BACKUP_KENNZ;0
# Telerad
0430;EXPORT_TELERAD_KENNZ;0
0431;TELERAD_PFAD;
0440;TELERAD_DIREKT;0
# CP für Datensicherung
0501;CP_NACH_CD_DIR;1
# LINK
0601;MAKE_LINK;1
0610;LINK_EXPORT;1
0611;LINK_BEFUND1;befund1
#0612;LINK_BEFUND2;befund2
#0613;LINK_BEFUND3;befund3
#0614;LINK_BEFUND4;befund4
#0615;LINK_BEFUND5;befund5
#0616;LINK_BEFUND6;befund6
0620;LINK_BACKUP;backup
# anzeige in AL
0701;MR_IN_AL;1
0702;CT_IN_AL;1
0703;CR_IN_AL;1
0704;MG_IN_AL;1
0705;DX_IN_AL;1
0706;US_IN_AL;1
0707;NX_IN_AL;1
0708;NM_IN_AL;1
0709;RF_IN_AL;1
0710;SC_IN_AL;1
# löschen
0801;ERLAUBE_LOESCHEN;0
0802;LOESCHE_CAL;0
0803;LOESCHE_CAL_MOD;S
# Viewer
# 1600x1200
# 0900;07_AKTIV;1 # Meditec-Viewer wird geladen F4
# 0901;DUAL_KENNZ;1 # 2 BS
# 0902;VIEW_XD0;2000 # Groesse X
# 0903;VIEW_YD0;1450 # Groesse Y
# 0904;ADD_XD0;2048 # ADD_X * Virtuelle BS
# 0905;VIEW_XD1;2000 # Groesse X
# 0906;VIEW_YD1;1450 # Groesse Y
# 0907;ADD_XD1;2048 # ADD_X * Virtuelle BS
0900;07_AKTIV;1
0901;DUAL_KENNZ;0
0902;MAX_DISPLAY;8
0903;MAX_VIEWER;8
0904;DISPLAY_RECHTS;:0.1
0910;VIEW_XD0;1280
0911;VIEW_YD0;920
0912;ADD_XD0;1280
0913;VIEW_XD1;1260
0914;VIEW_YD1;920
0915;ADD_XD1;1280
# BB hochkant
#0900;07_AKTIV;1
#0901;DUAL_KENNZ;1
#0902;MAX_DISPLAY;8
#0903;MAX_VIEWER;8
#0904;DISPLAY_RECHTS;:0.1
#0910;VIEW_XD0;1200
#0911;VIEW_YD0;1490
#0912;ADD_XD0;1200
#0913;VIEW_XD1;1200
#0914;VIEW_YD1;1490
#0915;ADD_XD1;1200
# export_mod für Zeile 24
1000;EXPORT_STATION;1
1001;EXPORT_MOD1;OX
1002;EXPORT_MOD2;--
1003;EXPORT_MOD3;--
1004;EXPORT_MOD4;--
# ersatz für Empfänger.txt
1010;EXPORT_NAME1;Zum OSX1
1011;EXPORT_NAME2;Zum MR
1012;EXPORT_NAME3;Zum LEO
1013;EXPORT_NAME4;Zum VIA
#
1020;EXPORT_AET1;osirix1
1021;EXPORT_AET2;MRC37731
1022;EXPORT_AET3;SYNGOVIA
1023;EXPORT_AET4;SYNGOVIA
#
1030;EXPORT_IP1;
1031;EXPORT_IP2;
1032;EXPORT_IP3;
1033;EXPORT_IP4;
#
1040;EXPORT_PORT1;
1041;EXPORT_PORT2;
1042;EXPORT_PORT3;
1043;EXPORT_PORT4;
1050;MDCMSEND;1
# Export für AS
1101;OEHM;0
1102;EFILM;0
1103;EFILM_CONFIG_DATEI;EEmpfaenger.txt
# RIS
1201;PATNU_FUER_RIS;1
1202;PATNU_FUER_KIS;0
1203;PATNU_FUER_VIEWER;0
1204;RIS_IP;
1205;RIS_LID;c0
# Patordnerschema
1301;PATORDNER_SCHEMA;1
# schreibe LOG für dicom_import
1401;IMPORTLOG;0
1402;IMPORTLOG_DATEI;
# Datenbank
# abgleich mit PG_HOST
1500;PG_HOST;
1501;KENNZ_PG_HOST;0
1502;ABGLEICH_AL;0
1503;ABGLEICH_IMPORT;0
# RIS Vorbefunde
1601;LESE_RIS_VORBEFUNDE;0
# FARBE
1701;FARBSTATUS;1
1702;FARBE;0
# MASC
1800;MASC_ARCHIV_PFAD;/MASC/DB_MASC_ARCHIV
1801;LESE_MASC;0
1805;MDCMSEND_MASC_BEFUND;0
1810;IP_MASC_BEFUND;
1811;PORT_MASC_BEFUND;
1812;AET_MASC_BEFUND;JIVEX
# TELERAD_RSYNC
2000;RSYNC;0
2001;RSYNC_SERVER;
2002;RSYNC_QUELLE;
2003;RSYNC_ZIEL;
# Zeile F5
3000;ZEILE_F5;1
3001;MODUS_F5;1
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ok, es ist also kein Standard-CSV, sondern ein "krudes" proprietäres Format... oder kennt das jemand? :K

Dennoch sieht es ja an sich erst einmal nicht schwer zu parsen aus. Man müsste jetzt wissen, *was* Du davon haben willst.

Wie sieht denn Dein Ansatz dazu aus?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten