Bei den Sets müsste der letzte Ansatz von mir der effizienteste sein, also ohne map().
[Python3] char-Listen-Prüfung im String(-Literal)
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
|
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 12067 |
Den nehme ich mir noch vor. Ich musste nur die drängende Erstneugierde loswerden, daher auch die improvisierte Datenquelle 😇 btw: Das mit der map ist auch nicht verkehrt, letzten Endes werde ich ja nicht mit einer Liste von Sonderzeichen weiterarbeiten 😉 Mir gefällt die Idee mit set allerdings auch besser, ich muss mich da aber noch richtig reinlesen. Das ist der Nachteil von modernen Sprachen. Bei C hab ich drei alte Werkzeuge und muss damit alles „verkombinieren“, bei Python sieben Milliarden… pro Aufgabe… |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12801 |
Immerhin liegt da Faktor 5 dazwischen.
Wenn Du Spaß daran hast, kannst Du ja mal diesen Benchmark unter Ruby laufen lassen:
Für Ersetzungen würde ich allerdings einen anderen Ansatz verwenden. Z.B. so:
|
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 12067 |
Klar 😉 Der Vergleich ist aber auch nicht ganz fair, da ich in Python die Datei bereits in den Speicher gelesen habe. user@desktop[~/Projekte/Playground/ruby]› ./rklm_sonderzeichen_ermitteln.ruby ../python/sonderzeichen_ermitteln.beispieldaten Rehearsal ----------------------------------------- regex 0.238342 0.000089 0.238431 ( 0.239667) -------------------------------- total: 0.238431sec user system total real regex 0.223410 0.003308 0.226718 ( 0.227490) user@desktop[~/Projekte/Playground/ruby]› Ersetzungen würde ich auch über eine Map machen. Da ich gerade zu faul bin in Suchmaschinen rumzustöbern: Bedeutet rescue nil, dass alle exceptions ignoriert werden oder dient das als break? |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12801 |
Kann man recht einfach ändern, so dass das auch passiert. Ich kann gerade nicht testen, aber so sollte es gehen:
Analog für die Ersetzung.
Ersteres. Ich musste das einbauen, weil ich wg. PlayOnLinux (WINE) Dateinamen auf der Platte habe, die nicht in UTF-8 kodiert sind. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 12067 |
user@desktop[~/Projekte/Playground/ruby]› ./rklm_sonderzeichen_ermitteln_V2.ruby ../python/sonderzeichen_ermitteln.beispieldaten Rehearsal ----------------------------------------- regex 0.204135 0.003512 0.207647 ( 0.207936) -------------------------------- total: 0.207647sec user system total real regex 0.195346 0.003290 0.198636 ( 0.198841) user@desktop[~/Projekte/Playground/ruby]› Jetzt weißt du auch, wie langsam meine SSD ist 😉
Danke … und interessanter Aspekt. Ich kam noch nie in die Verlegenheit darüber zu stolpern. Betrifft das nur Windows-Dateien? Zwischen FreeBSD,„Linuxen“ und iOS scheint das keine Probleme zu machen — oder ich hatte Glück. |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12801 |
Die Linuxe haben generell kein Problem damit, denke ich, denn die behandeln die Dateinamen lediglich als eine Folge von Bytes. Blöd ist halt, wenn man Tools hat, die bestimmte Kodierungen erwarten, wie der Windows-Explorer und in dem Fall Ruby, und die dann auf anders kodierten Inhalt treffen. Wine ist halt ein besonders blöder Fall, weil da immer irgendwelche von den alten Windows-Kodierungen verwendet werden anstatt UTF-8, was ein vernünftiger kleinster gemeinsamer Nenner wäre. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 12067 |