findall für Anfänger
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Was macht denn der Code in Zeile 9 bis 15?shadow07 hat geschrieben:der code macht was er soll, obwohl mit Sicherheit Verrenkungen drin sind die Profis besser wissen (?)
Das ist die falsche Frage. Was du machen willst ist es in Fließkommazahlen zu konvertieren und anzuzeigen. Eigentlich nicht einmal in ``float``s sondern besser in ``Decimal``s.shadow07 hat geschrieben:interessant für mich wäre: wie kann ich das komma ersetzten durch einen Punkt (zum berechnen) und anschließend wieder mit Komma austausche ohne ellenlange Code?
Ich glaube das zeige ich dir besser am Beispiel:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from decimal import Decimal
from itertools import izip
import lxml.html
from lxml.cssselect import CSSSelector
document = lxml.html.parse('http://www.esyoil.com/heiz%C3%B6lpreise/heiz%C3%B6l_Obermarchtal_e3.php')
amounts = (int(item.attrib['value'])
for item in CSSSelector('td.menge > input')(document))
old_prices = (Decimal(item.text[:-2].replace(',', '.'))
for item in CSSSelector('td.preis_his')(document))
current_prices = (Decimal(item.text[:-2].replace(',', '.'))
for item in CSSSelector('td.preis_akt')(document))
for amount, old, new in izip(amounts, old_prices, current_prices):
overall = (amount / 100) * new
print "%d Liter, neuer Preis %.2f, alter Preis %.2f, gesamt %.2f" % (
amount, new, old, overall)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
erwischt sind schon entfernt, ich habs erst nach dem posten bemerkt und war zu faul den Post zu ändernWas macht denn der Code in Zeile 9 bis 15?
dein Vorschlag sieht sehr aufgeräumt aus, so kenn ich es eigentlich aus meine anderen Projekten, aber:
File "plugin4.py", line 3, in <module>
from decimal import Decimal
ImportError: No module named decimal
ich kann und will auf keinen Fall zusätzliche Komponenten installieren, das ganze ist ein Projekt um Python und Pluginprogrammierung für die Box zu lernen (das mit dem Öl war eine Idee weil es uns gerade interessiert, ich habe später mehr allgemeininteressante Sachen vor). Meine Plugins (so sie denn jemals laufen) will ich der Gemeinschaft zu Verfügung stellen und otto-normal-ich benutze nur-Bediener kann meist keine Module installieren, außerdem ist der Platz oft sehr begrenzt
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das heisst: Wenn du das nicht "nstalliert" hast, solltest du schleunigst ein aktuelles Python(2.6) benutzen (oder zumindest 2.5, wenn es Probleme mit Libraries gibt)decimal — Decimal fixed point and floating point arithmetic
New in version 2.4.
nun ja, selbst wenn es im 2.5er (das ist das bei mir laufende soweit ich weiß) dabei ist und nur anders importiert werden müßte, lxml.cssselect ist mir Sicherheit nicht dabei (und dieses Thema ist ja zur Genüge am Anfang des Freds durchgekaut worden
sicher, mit nem xml-Parser wäre es deutlich einfacher auf Informationen dieser Art zuzugreifen (und ich hätte da schon noch tolle Ideen), aber meine Gründe hatte ich ja mehrfach dargelegt
edit: soeben gefunden: wäre da was mit 'minidom' zu machen?
sicher, mit nem xml-Parser wäre es deutlich einfacher auf Informationen dieser Art zuzugreifen (und ich hätte da schon noch tolle Ideen), aber meine Gründe hatte ich ja mehrfach dargelegt
edit: soeben gefunden: wäre da was mit 'minidom' zu machen?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wenn du Python 2.5 hast (wo ElementTree in die Stdlib aufgenommen wurde), kannst du html5lib mitliefern (sind ja auch nur paar Dateien) und mit html5lib kann man ElementTree-Bäume erstellen in denen man dann die Preise zusammensuchen kann. Nicht ganz so komfortabel, weil ElementTree keine so praktischen Selektoren unterstützt, aber meiner Meinung nach immer noch besser als mit regulären Ausdrücken oder Minidom (wenn man aber unbedingt minidom haben will - html5lib kann auch das).shadow07 hat geschrieben:nun ja, selbst wenn es im 2.5er (das ist das bei mir laufende soweit ich weiß) dabei ist und nur anders importiert werden müßte, lxml.cssselect ist mir Sicherheit nicht dabei (und dieses Thema ist ja zur Genüge am Anfang des Freds durchgekaut worden
sicher, mit nem xml-Parser wäre es deutlich einfacher auf Informationen dieser Art zuzugreifen (und ich hätte da schon noch tolle Ideen), aber meine Gründe hatte ich ja mehrfach dargelegt
minidom alleine hat zwei Probleme: erstens ist es nur für valides XML gedacht. Damit kannst du dann die meisten HTML-Seiten gar nicht erst öffnen weil selbst korrektes HTML kein valides XML ist. Und die meisten Seiten haben nicht einmal fehlerfreies HTML. Also wirst du um html5lib in dem Fall nicht herumkommen. Zweites Problem ist die recht unangenehme API von minidom oder eigentlich von DOM generell.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
habe gerade mal einen Abfrage gestartet, vieleicht ist ja doch was dabei was man verwenden könnte: (python-xml?)
libpython2.5-1.0 - 2.5.1-ml3 -
python-codecs - 2.5.1-ml3 -
python-core - 2.5.1-ml3 -
python-crypt - 2.5.1-ml3 -
python-crypto - 1.9a6-r1 -
python-datetime - 2.5.1-ml3 -
python-email - 2.5.1-ml3 -
python-fcntl - 2.5.1-ml3 -
python-imaging - 1.1.5-r1 -
python-io - 2.5.1-ml3 -
python-lang - 2.5.1-ml3 -
python-logging - 2.5.1-ml3 -
python-math - 2.5.1-ml3 -
python-mime - 2.5.1-ml3 -
python-netclient - 2.5.1-ml3 -
python-netserver - 2.5.1-ml3 -
python-pickle - 2.5.1-ml3 -
python-pyopenssl - 0.6-r0 -
python-re - 2.5.1-ml3 -
python-shell - 2.5.1-ml3 -
python-stringold - 2.5.1-ml3 -
python-threading - 2.5.1-ml3 -
python-xml - 2.5.1-ml3 -
libpython2.5-1.0 - 2.5.1-ml3 -
python-codecs - 2.5.1-ml3 -
python-core - 2.5.1-ml3 -
python-crypt - 2.5.1-ml3 -
python-crypto - 1.9a6-r1 -
python-datetime - 2.5.1-ml3 -
python-email - 2.5.1-ml3 -
python-fcntl - 2.5.1-ml3 -
python-imaging - 1.1.5-r1 -
python-io - 2.5.1-ml3 -
python-lang - 2.5.1-ml3 -
python-logging - 2.5.1-ml3 -
python-math - 2.5.1-ml3 -
python-mime - 2.5.1-ml3 -
python-netclient - 2.5.1-ml3 -
python-netserver - 2.5.1-ml3 -
python-pickle - 2.5.1-ml3 -
python-pyopenssl - 0.6-r0 -
python-re - 2.5.1-ml3 -
python-shell - 2.5.1-ml3 -
python-stringold - 2.5.1-ml3 -
python-threading - 2.5.1-ml3 -
python-xml - 2.5.1-ml3 -
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also wenn du Python 2.5.1 hast, dann nimm doch das + html5lib (700 KB Quelltext, aber da kannst du wohl auch noch einiges Löschen was du nicht brauchst falls es dir zu groß ist) und arbeite mit ElementTree (was in Python 2.5 mitgeliefert ist). Da brauchst du kein ``python-xml``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice