Mehrere Anfängerfragen

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.
Antworten
knapp
User
Beiträge: 7
Registriert: Dienstag 6. März 2012, 09:10

Dienstag 6. März 2012, 09:39

Hallo,

ich wollte Python als Ersatz für Batchskripte benutzen, aber stoße schon gleich zu Anfang auf einige Probleme.

Ich habe mir Python 3.2 installiert und wollte einfach ein Tut durchgehen. Das hat mir schon bei "Hello World" Fehler rausgeworfen, was ich fast gar nicht glauben wollte.
Ursache war, dass die kopierten Codezeilen Einrückungen hatten UND "print" ab der Version 3 wohl geändert worden ist.

OK, das habe ich gestern nach einigem Probieren und Googlen herausgefunden. Ich möchte mich aber nun nicht mit Problemen aufhalten, sondern einfach ein paar Kleinigkeiten "programmieren" und zum Ziel kommen. Deswegen meine Frage an die erfahreneren Leute:

1. Ich benutze Windows XP. Soll ich mit Python 2 anfangen, oder mit Python 3?

2. Gibt es auch ein gutes Anfänger-Tut für Python 3?

3. Ich möchte im Wesentlichen Skripte für Datei- und Ordneroperationen erstellen.
Z.B. Files anhand von Erstelldatum filtern, Ordner mit Datumscode in einem bestimmten Format (YYYY-MM-DD) erstellen und die Datei dorthin verschieben.
Ich dachte zuerst, dass das mit der Klasse(?) "os" ginge. Entsprechende Funktionen habe ich aber darin nicht gefunden.
Bin ich mit Python für meine Vorhaben überhaupt gut bedient, oder soll ich lieber bei Batch-Skripten bleiben oder etwas anderes nehmen?

4. Beim Aufruf meines Hello World-Skripts passiert erstmal 2 Sekunden lang nichts Sichtbares. Ein Batch-Skript hätte da schon längst ein Ergebnis auf den Schirm gehauen. Ist Python immer so langsam, oder kann man das auch Beschleunigen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 6. März 2012, 09:48

knapp hat geschrieben: 1. Ich benutze Windows XP. Soll ich mit Python 2 anfangen, oder mit Python 3?
Also bei Deinen Anwendungsfall sehe ich keinen Hindernisgrund für Python 3!
knapp hat geschrieben: 2. Gibt es auch ein gutes Anfänger-Tut für Python 3?
Hast Du Dir das "offizielle" Tutorial mal angeguckt? (In der Doku integriert!). Ansonsten checke doch mal, ob "A Byte of Python" auch schon auf Python3 portiert wurde.
knapp hat geschrieben: Ich dachte zuerst, dass das mit der Klasse(?) "os" ginge. Entsprechende Funktionen habe ich aber darin nicht gefunden.
Schau Dir mal auch die Module ``os.path``, ``shutil``, ``glob``, ``fnmatch`` usw. an.
knapp hat geschrieben: Bin ich mit Python für meine Vorhaben überhaupt gut bedient, oder soll ich lieber bei Batch-Skripten bleiben oder etwas anderes nehmen?
Prinzipiell schon. Eine universelle Sprache wie Python bietet Dir eben bessere Datenstrukturen und deckt leichter Grenzfälle ab, bei denen man in reinen Bash-Scripting-Sprachen immer auf externe Helfertools angewiesen ist. Natürlich gibt es auch Situationen, bei denen Bash-Scripte die einfachere Wahl sind.
knapp hat geschrieben: 4. Beim Aufruf meines Hello World-Skripts passiert erstmal 2 Sekunden lang nichts Sichtbares. ... Ist Python immer so langsam, oder kann man das auch Beschleunigen?
Das hängt wohl vom System ab - zwei Sekunden klingt mir jetzt aber auch ziemlich lang. Ist Dein Rechner irgend wie älter?

Wobei man zur Not auch damit leben kann - denn idR. ruft man ja nicht 20 Mal in einer Minute ein Script auf ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3248
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dienstag 6. März 2012, 10:00

knapp hat geschrieben:1. Ich benutze Windows XP. Soll ich mit Python 2 anfangen, oder mit Python 3?
2. Gibt es auch ein gutes Anfänger-Tut für Python 3?
3. Ich möchte im Wesentlichen Skripte für Datei- und Ordneroperationen erstellen.
Z.B. Files anhand von Erstelldatum filtern, Ordner mit Datumscode in einem bestimmten Format (YYYY-MM-DD) erstellen und die Datei dorthin verschieben.
Ich dachte zuerst, dass das mit der Klasse(?) "os" ginge. Entsprechende Funktionen habe ich aber darin nicht gefunden.
4. Beim Aufruf meines Hello World-Skripts passiert erstmal 2 Sekunden lang nichts Sichtbares.
1: Python 3 ist im Kontext deiner Anforderungen eine gute Wahl.
2:Das offizielle Tutorial funktioniert ganz gut.
3: Mit os.stat() bekommst du das Erstellungsdatum und shutil kann dir beim Verschieben und Kopieren von Dateien helfen.
4: Ich halte das für ungewöhnlich. Wie rufst du das Skript denn auf?
knapp hat geschrieben:Bin ich mit Python für meine Vorhaben überhaupt gut bedient, oder soll ich lieber bei Batch-Skripten bleiben oder etwas anderes nehmen?
Wenn dir die Möglichkeiten von Batch-Skripten reichen, dann gibt es keinen Grund umzusteigen. Diverse Leute setzen auch Perl für solche Aufgaben ein. Ich persönlich finde Perl allerdings potthässlich und neehme üblicherweise Python für nicht völlig triviale Aufgaben im Shell-Umfeld.
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Dienstag 6. März 2012, 10:02

Guten morgen,

zu 1.: Auf diese Frage gibt es wie so oft nur eine dieser "das kommt darauf an"-Antworten. Das mir bisher einzig schlüssige Argument gegen Python 3 ist, dass diverse Module noch nicht portiert sind. Da muss man also selbst schauen, was man an externen Modulen verwenden möchte und ob das mit Python 3 klappt. Für das, was Du machen möchtest ist es IMHO ziemlich egal, ob Du Py2 oder Py3 verwendest. Von daher macht es vielleicht Sinn, wenn Du Dir gleich die Neuerungen von Py3 aneignest.
zu 2.: Ja, hier findest Du das offizielle, ich würde kein anderes verwenden und hier dasselbe auf deutsch.
zu 3.: Das os-Modul, das shutil-Modul und das sys-Modul sollten Dir auf jeden Fall mehr als genügend Funktionalität bieten.
zu 4.: Kann man anhand Deiner Infos nicht beantworten. Genau so, wie man behaupten könnte, Python sei langsam, könnte man auch behaupten, Python sei schnell...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
knapp
User
Beiträge: 7
Registriert: Dienstag 6. März 2012, 09:10

Dienstag 6. März 2012, 10:47

Örks...
Ich sehe, ihr nehmt euch Anfängern an :-)
Ich hoffe, ich übersehe nichts und beantworte alle Rückfragen.

zu1.: Da seid ihr euch wohl einig, dass Py3 nicht schlecht oder sogar besser für mich ist, weil ich mir dann nicht nochmal "unnötig" die alten Sachen zusätzlich aneignen muss.

zu2.: Das offizielle Tut hatte ich gefunden, aber das war mir viel zu umfangreich. Ich wollte gestern erstmal Py installieren und Hello World ans Laufen bekommen. Sämtliche Feinheiten interessieren mich im Moment eigentlich nicht, weil ich nicht so viel damit mache und das dann ganz sicher nicht mehr weiß, wenn ich es mal anwenden möchte.
Ich hatte mir deswegen ein Tut aus einem Forum gesucht, welches praktisch mit "Hello World" angefangen hat. Aber das bezog sich leider auf Py2, und das Tut enthält natürlich keinen Hinweis auf Änderungen in Py3. :)

zu3.: Danke für die Nennung der nützlichen Module. Ohne solche Infos wäre ich aufgeschmissen. So habe ich gute Aufhänger und kann mich da durchwursten.

zu4.: Ich habe unter XP eine Kommandozeile (cmd.exe) geöffnet. Darin habe ich das Py-Script aufgerufen:
Python hello.py

2 Sekunden dauert es nicht. Das kam mir gestern länger vor. Aber 1 Sekunde sind es schon.

Für das Aufrufen des Programms ist das nicht so tragisch, aber wenn man mal aus einem Skript heraus andere Skripte aufruft, dann könnte es vielleicht doch relevant werden. Nebenbei könnte diese Verzögerung auch ein Hinweis darauf sein, dass Py nicht nur langsam ist, sondern auch viele Ressourcen selbst für Kleinigkeiten benötigt.

Mein PC ist nicht topaktuell, aber mit 4x2,5 GHz und 4 GB-RAM auch keine steinalte, lahme Krücke. Also daran sollte es eher nicht liegen.


Vielen Dank erst mal für eure zahlreichen und vor allem schnellen Antworten.
Ich werde mich vermutlich diese Woche noch hinsetzen und versuchen mein erste sinnvolles Skript zu erstellen, mit dem ich Ordner erstelle und Dateien verschiebe.
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 6. März 2012, 11:05

knapp hat geschrieben:zu2.: Das offizielle Tut hatte ich gefunden, aber das war mir viel zu umfangreich. Ich wollte gestern erstmal Py installieren und Hello World ans Laufen bekommen. Sämtliche Feinheiten interessieren mich im Moment eigentlich nicht, weil ich nicht so viel damit mache und das dann ganz sicher nicht mehr weiß, wenn ich es mal anwenden möchte.[/code]
Umfangreiche Themen brauchen eben umfangreiche Erläuterungen. Wobei man bei dem offiziellen Tutorial nicht sagen kann, dass es besonders viel ist. Durch die paar Seiten solltest du dich schon durcharbeiten, wenn du mit Python ernsthaft arbeiten möchtest.
knapp hat geschrieben:2 Sekunden dauert es nicht. Das kam mir gestern länger vor. Aber 1 Sekunde sind es schon.

Für das Aufrufen des Programms ist das nicht so tragisch, aber wenn man mal aus einem Skript heraus andere Skripte aufruft, dann könnte es vielleicht doch relevant werden. Nebenbei könnte diese Verzögerung auch ein Hinweis darauf sein, dass Py nicht nur langsam ist, sondern auch viele Ressourcen selbst für Kleinigkeiten benötigt.
Bei mir nimmt das Starten des Interpreters so wenig Zeit in Anspruch, dass man keinerlei Zeitverzögerung spürt. Das kann sich natürlich ändern wenn der Interpreter das erste Mal nach dem Systemstart geladen wird oder wenn zum ersten Mal große Module geladen werden.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 6. März 2012, 11:11

knapp hat geschrieben: Für das Aufrufen des Programms ist das nicht so tragisch, aber wenn man mal aus einem Skript heraus andere Skripte aufruft, dann könnte es vielleicht doch relevant werden.
Aber dafür brauchst Du ja keinen neuen Interpreter starten, sondern kannst die Scripte ja direkt im Code einbinden, indem Du direkt die auszuführende Funktion aufrufst.

"Externe" Programme musst Du natürlich per ``subprocess``-Modul aufrufen, was dann wiederum "Startzeit" kosten kann - aber das wäre in einer Shell ja nichts anderes. Für verschachtelte Python-Scripte ist das aber eben nicht notwendig.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Kebap
User
Beiträge: 421
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Dienstag 6. März 2012, 11:53

Hallo knapp, willkommen an Bord! :mrgreen:

Hast du schon mal andere größere Sachen programmiert, oder lernst du jetzt neben Python auch noch das Programmieren an sich?

Der Hauptunterschied zwischen Python 2 und 3 ist eigentlich nur

python2: print "hello world"
python3: print("hello world")

Dann gibt es noch einen wichtigeren Unterschied beim Eingeben von Daten mit input() und raw_input(), aber im großen und ganzen sollten sich die Tutorials nicht stark unterscheiden. Ich bezweifle nämlich leider, dass da schon viele von 2 auf 3 aktualisiert wurden.

Python ist eigentlich sehr schnell für solche kleinen Sachen. OK anscheinend dauert der erste Start bei dir ca. 1sec, aber das wird nicht viel langsamer. OK, bei Dateioperationen muss man natürlich zwischendurch auf die Festplatten warten, usw, dann dauert es vielleicht doch mal 5sec. :mrgreen:

edit: Leerzeichen zwischen print ("hello world") entfernt.
Zuletzt geändert von Kebap am Dienstag 6. März 2012, 12:27, insgesamt 1-mal geändert.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Dienstag 6. März 2012, 12:01

Kebap hat geschrieben:Der Hauptunterschied zwischen Python 2 und 3 ist eigentlich nur...
Das würde ich so aber nicht unterschreiben! Und so schon gar nicht. 'print' ist in Python3 zu einer Funktion geworden und keine Anweisung geblieben. Dein Python3-Beispiel wird also nicht funktionieren!

@knapp:
Falls es Dich interessiert, kannst Du Dir hier mal einen Überblick über die Änderungen zwischen Py2 und Py3 holen.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
snafu
User
Beiträge: 5896
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 6. März 2012, 12:12

@mutella: Ein `print ("hello world")` funktioniert unter Python 3 genau so wie auch andere Aufrufe mit einem oder gar mehreren Leerzeichen dazwischen funtionieren.
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Dienstag 6. März 2012, 12:25

:oops:
Asche auf mein Haupt... wenn ich mal in Klugscheißer-Laune bin...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dienstag 6. März 2012, 12:51

Den Hauptunterschied wuerde ich `print` und `input` auch nicht nennen. Zwei Themen die viel tiefgreifender sind: Lazyness per default, z.b. bei map oder dict.items(); Unicode strings per default. Letzteres faellt einem v.a. auf die Fuesse wenn man mit externen Programmen arbeitet und deren Ausgaben liest.

Der What's new Link von mutetella ist auch mit Vorsicht zu geniessen. Die What's new geben Ueberblick was sich zwischen den Versionen getan hat, die Unterschiede zwischen 2.6 und 3.2 muss man sich aus denen zu 3.0, 3.1 und 3.2 zusammensetzen. Wenn man stattdessen den Weg ueber 2.7 geht, kann man Teile von 3.0 und 3.1 ignorieren.

Jemand eine Ahnung, ob sich schon jemand die Arbeit gemacht hat die pro Version relevanten Teile zusammenzufassen?
knapp
User
Beiträge: 7
Registriert: Dienstag 6. März 2012, 09:10

Dienstag 6. März 2012, 12:53

@mutetella
Danke für den Link mit den Änderungen, aber das ist im Moment zu viel. Ich werde es mit Py3 versuchen und bei Problemen dann die Links und Tipps abgrasen.

@Kebap
Größere Sachen habe ich noch nicht programmiert. Ich habe immer wieder mal das Eine und Andere für den privaten Gebrauch gemacht. Ich bin aber nie weit gekommen.
Angefangen habe ich mit Basic auf einem Thomson TO7. Den kennt sicher niemand hier :)
Dann kam auf'm Gymi Basic auf einem Sinclair ZX Spectrum, oder wie der hieß.
Später kam Pascal hinzu.
An der Uni haben wir kurz was mit Pascal gemacht. Da habe ich Borland Pascal benutzt.
An der Uni bringen die einem nicht das Programmieren bei, sondern nur das Einschalten des PCs. Den Rest muss man sich neben dem ganzen anderen Kram selbst beibringen.
Ab 2000 habe ich dann hin und wieder was mit VBA in Excel und Word gemacht und zwischendurch immer wieder Winzigst-Batchdateien unter W2k/XP.

Da es aber schon total dämlich ist, mit einer Batchdatei auch nur eine einfache Schleife zu machen, und mir das viel zu kryptisch ist, wenn man mal den Dateinamen aus einem Pfad holen möchte, oder nur einen Index anhängen möchte, suche ich dafür einen Ersatz.

@Hyperion
Gestern kam es mir sehr lahm vor. Das hat mich gleich an Java-Programme oder an .NET erinnert. Da dauert das Starten auch meistens ziemlich lange.
Beim Starten meines Rechners, läuft eine Batchdatei ab, die am Ende 5 oder 6 Kommandozeilen ohne Pause hintereinander aufruft. Das poppt dann auf dem Bildschirm auf, als wären die gleichzeitig gestartet worden. Von so einer Start-Geschwindigkeit wäre mein Hello World weit entfernt.

Aber gut, das sollte meistens kein Thema sein. Wenn mir die Programmierung damit einfacher fällt, dann wiegt es das mehrmals auf.
Antworten