Hallo,
hier
http://www.linux-club.de/viewtopic.php?f=28&t=98852
habe ich versucht, jemandem ein Python-Skript anzubieten.
Bei mir klappt das auch, aber der OP dort sagt, er erhalte einen Fehler (jemand anders sagte das auch)
Wißt ihr, woran das liegt ? Bin jetzt auf Perl ausgewichen, aber das kann ja nicht Sinn der Sache sein ...
Viele Grüße
Problem aus dem Linux-Club
@abgdf: `sre` ist schon seit Ewigkeiten "deprecated", und bei mir (Python 2.5) wird beim ``import`` auch eine entprechende Warnung ausgegeben.
Die Namen sind indiskutabel und das Ganze sieht auch zu kompliziert aus. Reguläre Audrücke braucht man hier nicht. Das geht auch mit `str.rsplit()`.
Zur Fehlersuche sollte man vielleicht die Zeile wo's kracht mit `repr()` und ``print`` ausgeben. Vielleicht ist ja eine Leerzeile am Ende der Datei oder so.
Die Namen sind indiskutabel und das Ganze sieht auch zu kompliziert aus. Reguläre Audrücke braucht man hier nicht. Das geht auch mit `str.rsplit()`.
Zur Fehlersuche sollte man vielleicht die Zeile wo's kracht mit `repr()` und ``print`` ausgeben. Vielleicht ist ja eine Leerzeile am Ende der Datei oder so.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Ohman, die Forensoftware (wahrscheinlich selbst gehackt) ist grottig.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das ist hüben wie drüben phpBB. Grottig ja, aber selbstgemacht nein. Sowas übles produzieren wir hier nichtDauerbaustelle hat geschrieben:Ohman, die Forensoftware (wahrscheinlich selbst gehackt) ist grottig.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
@Leonidas: Ich meine die von der oben genannten Seite 8)
Aber phpBB ist allein schon wegen den ersten drei Buchstaben eklig ;)
Edit: AArgh, war schon spät gestern, die beiden Antworten gehören eigentlich hier http://www.python-forum.de/topic-16707.html hin -.-
Aber phpBB ist allein schon wegen den ersten drei Buchstaben eklig ;)
Edit: AArgh, war schon spät gestern, die beiden Antworten gehören eigentlich hier http://www.python-forum.de/topic-16707.html hin -.-
Natürlich konnte ich nicht widerstehen und möchte nun auch meine Lösung zum Besten geben
Oder die letzten drei Zeilen alternativ zusammengefasst, jedoch mit zusätzlichem Import:
Ein schöner Anwendungsfall für ein `defaultdict`. Zudem entfällt hier die `with`-Statement-Diskussion, weil einfach in guter Unix-Tradition die Interoperabilität mit anderen Tools leicht gemacht wird und das Progrämmchen seine Daten über die Standardeingabe erhält: `cat data.txt | python script.py` - geht mit `type` anstelle von `cat` auch unter Windows.
Man könnte ein `sort` (gibt's nicht von Haus aus unter Windows) vorschalten und im Code dann `itertools.groupby` verwenden (dafür müssen die Daten vorsortiert sein) oder man sortiert selbst. Insgesamt dürfte das dann aber weit umständlicher werden. So wie jetzt ist die Reihenfolge der Datenzeilen egal. Aufsplittung der Zeilen sowie Sortierung, Limitierung und Formatierung der Ergebnisse geht mit UNIX-Tools (`awk`/`cut`/, `sort`, `head`, ...) auch schön, ist aber eben mehr oder weniger in der Plattform eingeschränkt - hier spielt Python ja seinen Vorteil aus.
Code: Alles auswählen
from collections import defaultdict
import sys
LIMIT = 10
if __name__ == '__main__':
urls = defaultdict(float)
for line in sys.stdin:
url, access_time = line.strip().split(' ', 1)
urls[url.strip("'")] += float(access_time)
results = ((access_time, url) for url, access_time in urls.iteritems())
for result in sorted(results, reverse=True)[:LIMIT]:
print '%8.4f %s' % result
Code: Alles auswählen
from operator import itemgetter
# [...]
for url, access_time in sorted(urls.iteritems(), key=itemgetter(1), reverse=True)[:LIMIT]:
print '%8.4f %s' % (access_time, url)
Man könnte ein `sort` (gibt's nicht von Haus aus unter Windows) vorschalten und im Code dann `itertools.groupby` verwenden (dafür müssen die Daten vorsortiert sein) oder man sortiert selbst. Insgesamt dürfte das dann aber weit umständlicher werden. So wie jetzt ist die Reihenfolge der Datenzeilen egal. Aufsplittung der Zeilen sowie Sortierung, Limitierung und Formatierung der Ergebnisse geht mit UNIX-Tools (`awk`/`cut`/, `sort`, `head`, ...) auch schön, ist aber eben mehr oder weniger in der Plattform eingeschränkt - hier spielt Python ja seinen Vorteil aus.
Useless use of cat ... Umleitungsoperatoren existieren.Y0Gi hat geschrieben:`cat data.txt | python script.py` - geht mit `type` anstelle von `cat` auch unter Windows.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Eher ``python script.py < data.txt`` oder ``python script.py > data.txt``, je nachdem ob Input oder Output. Aber ja, das vergesse ich auch gerne.Y0Gi hat geschrieben:Ach, du meinst `data.txt < python script.py`?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Oder gleich so: python script.py < data.txt > newdata.txtLeonidas hat geschrieben:Eher ``python script.py < data.txt`` oder ``python script.py > data.txt``, je nachdem ob Input oder Output. Aber ja, das vergesse ich auch gerne.Y0Gi hat geschrieben:Ach, du meinst `data.txt < python script.py`?
Jetzt ist mir wieder klar, warum ich im Zweifelsfall `cat` verwende
Überschreibt das zweite Statement nicht die `data.txt` mit der Programmausgabe?Leonidas hat geschrieben:Eher ``python script.py < data.txt`` oder ``python script.py > data.txt``, je nachdem ob Input oder Output. Aber ja, das vergesse ich auch gerne.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, aber wenn man den Output in data.txt haben will ("je nachdem ob Input oder Output") dann ist es auch das richtige.Y0Gi hat geschrieben:Überschreibt das zweite Statement nicht die `data.txt` mit der Programmausgabe?Leonidas hat geschrieben:Eher ``python script.py < data.txt`` oder ``python script.py > data.txt``, je nachdem ob Input oder Output. Aber ja, das vergesse ich auch gerne.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice