Python eleganter? Perl-Programm konvertieren

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.
w1se
User
Beiträge: 2
Registriert: Donnerstag 12. September 2002, 09:06
Wohnort: Duisburg
Kontaktdaten:

Python eleganter? Perl-Programm konvertieren

Beitragvon w1se » Donnerstag 12. September 2002, 09:14

Hallo zusammen. :D

Bisher programmiere ich in PHP und Perl. Jetzt bin ich auf Python gestossen und finde besonders den Ansatz ohne { } zu arbeiten echt klasse. :-)

Doch um mich zu ueberzeugen, das Python ein Ersatz fuer Perl ist, der ebenso elegant (oder eleganter) ist, brauche ich eure Hilfe. Bitte helft mir, dieses Perl-Programm zu übertragen:

Code: Alles auswählen

#!d:\perl\bin\perl.exe -w
use strict;

my $datei = "server.txt";
my $zeilennr = 0;
my $titel = "Pruefe Serverliste";
my @spalten;
my $i = 0;

print "+" . "-" x (length($titel)+2) . "+\n";
print "| " . $titel . " +\n";
print "+" . "-" x (length($titel)+2) . "+\n";

open(DATEI, $datei);
while (<DATEI>){
   $zeilennr++;
   if (/^#!/){
      $_ =~ s/^...//;
      @spalten = split( / \| /, $_);
   }
   s/#.*//;         # Kommentarzeilen leeren
   next if /^\s*$/;               # leere Zeilen ueberspringen
   @_ = split(/ \| /, $_);
   if (@_ < @spalten){
      print "Fehler in Zeile " . $zeilennr . ":\n";
      print $_ . "\n";
   }
}
print "\n" . $zeilennr . " Zeilen gesamt\n";
close(DATEI);


Das Programm liest eine Datei Zeile für Zeile ein, ignoriert dabei die Kommentarzeilen mit # am Anfang. Ausnahme ist die Zeile mit #! am Anfang, danach kommen die Spaltenüberschriften für die Felder.
Die Zeilen bestehen aus Spaltenwerten, die mit <SPACE>|<SPACE> getrennt sind.
Das Programm sucht Zeilen, die weniger Spalten als die Referenzspalte (die mit #!) haben.

Kriegt man das eleganter hin?

Danke
w1se
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Re: Python eleganter? Perl-Programm konvertieren

Beitragvon Voges » Donnerstag 12. September 2002, 10:23

Hallo!

Ich glaub', der Perlcode ließe sich auch noch eleganter gestalten. Einige der doch recht "teuren" RegExps ließen sich sicherlich vermeiden.

Mein Python-Vorschlag (lauffähig ab Version 2.2):

Code: Alles auswählen

import re,string

file = open("foo.dat")

counter = 0
for line in file:
   counter += 1
   
   if re.match(r"^\s*#[^!]",line):
      continue
   elif line.find("#!") == 0:
      anzSoll = line.count("|")
   else:
      anzIst = line.count("|")
      if(anzIst < anzSoll):
         print "Fehler in Zeile %d"%counter
   
file.close()


Geht vielleicht hier und da kürzer (mit map() und filter()), aber soll ja erstmal lesbar sein.

Jan
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Re: Python eleganter? Perl-Programm konvertieren

Beitragvon joerg » Donnerstag 12. September 2002, 11:09

Ich habe noch eine leicht abgewandelte Alternative zum Code von "Voges", allerdings ohne reguläre Ausdrücke.

Die Schleife würde dann so aussehen, leicht zusammengefaßt:

Code: Alles auswählen

for line in file:
   counter += 1
   line = line.lstrip()
   if line.startswith('#!'):
      anzSoll = line.count("|")
      continue
   if line[0] != '#' and line.count("|") < anzSoll:
      print "Fehler in Zeile %d" %counter


Statt line.startswith('#!') würde auch line[:2] == '#!' gehen. Wie mein Code geschwindigkeitsmäßig ist, weiß ich allerdings nicht.

Aber ich finde es wirklich beeindruckend wie viel klarer und 'menschlicher' der Python-Code aussieht verglichen mit Perl. :lol:
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Re: Python eleganter? Perl-Programm konvertieren

Beitragvon joerg » Donnerstag 12. September 2002, 12:42

joerg hat geschrieben:

Code: Alles auswählen

   ...
   if line[0] != '#' and line.count("|") < anzSoll:
   ...


Sorry, war noch ein Fehler drin: Wenn man stattdessen schreibt:

Code: Alles auswählen

   if line and line[0] != '#' and line.count("|") < anzSoll:

geht er auch schnell und problemlos über leere Zeilen drüber.
w1se
User
Beiträge: 2
Registriert: Donnerstag 12. September 2002, 09:06
Wohnort: Duisburg
Kontaktdaten:

Danke | Python-Bücher

Beitragvon w1se » Freitag 13. September 2002, 10:36

Hallo zusammen.


Danke euch für die schnellen Antworten :-)

Welche Python-Bücher empfiehlt ihr? Kennt ihr das Python-Buch aus dem Galileoverlag? Die PHP-Bücher und das Perl-Einsteigerbuch finde ich gut gemacht.

Gruß
w1se
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Re: Danke | Python-Bücher

Beitragvon Voges » Freitag 13. September 2002, 13:18

Hallo!

Zur Zeit dürfte noch kein deutsches Buch (wohl auch nicht das Galileo-Buch) die Neuerungen der Version 2.2 beschreiben, was ich schon als nachteilig ansehe.

Wenn Englisch kein Problem für Dich ist, wäre das folgende Buch vielleicht geeignet (ich kenne es allerdings nicht, soll aber gut sein):

Hetland, Magnus Lie
Practical Python
http://www.apress.com/book/bookDisplay.html?bID=93

Der Einführungsteil wird nicht so ausführlich sein wie bei einem ausgesprochenen Einsteigerbuch, dafür beinhaltet das Buch aber auch weiterführende Themen und zudem eine Sprachreferenz. Ich denke, wenn man bereits mit Scriptsprachen wie Perl oder PHP vertraut ist, wäre das Buch eine gute Wahl.

Ansonsten vielleicht sich erstmal mit dem Python-Tutorial über Wasser halten oder bei Ebay ein älteres Buch ersteigern und auf dt. Neuerscheinungen warten.

Jan
Gast

Python Bücher

Beitragvon Gast » Freitag 13. September 2002, 18:29

Das Galileo Buch 'Einstieg in Python ist recht gut, es behandelt alle wesentlichen Grundlagen von Python und enthält darüber hinaus auch noch Einführungen zu dem Applicationserver Zope sowie ein Kapitel zum Umgang mit Datenbanken am Beispiel Mysql.
Für etwas ausführlichere Information zu Python ist mein Favorit bei den deutschsprachigen Büchern 'Python 2' von Martin von Löwis und Nils Fischbeck.
Während Einstieg in Python seinem Anspruch als Buch für Anfänger und Umsteiger sicherlich gerecht wird, ist Python 2 wohl mehr für etwas fortgeschrittene Anwender geschrieben.
Eine gute Übersicht zu deutschsprachigen Pythonbüchern befindet sich auf Peter Gerlach's Pythonseiten unter http://www.way2python.de/Kontakt/buecher.html.
Gruß
Jochim

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder