Seite 1 von 1

Dateien öffnen

Verfasst: Sonntag 3. November 2013, 00:03
von pixewakb
Hi, ich sitze jetzt gerade wieder vor einem Python-Skript und würde gern eine Datei für den Input und eine für den Output öffnen, kann ich das mit dem with-Statement auch in einer Zeile machen oder muss ich das irgendwie in zwei Zeilen packen. Hilfe wäre gerade super, ich habe das schon mal irgendwann gesehen, würde es mir dann gern speichern ;)

Konkret also: Kann ich die beiden Anweisungen irgendwie in eine Zeile packen, irgendwie mit and verbinden?

Code: Alles auswählen

with open(inputfile, encoding="utf-8") as f:
    with open(outputfile, "a", encoding="utf-8") as g:
Würde die Einrückung verbessern :)

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 00:09
von darktrym
Suchst du das Komma?

Code: Alles auswählen

with open(inputfile, encoding="utf-8") as f, open(outputfile, "a", encoding="utf-8") as g:

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 00:12
von pixewakb
Ja, super. Passt. Als ich gerade bearbeitet hatte, habe ich dann auch mal dran gedacht. Du hast Recht!

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 02:08
von BlackJack
Die Syntax hatten sie sich für meinen Geschmack sparen können, weil man damit eigentlich in keinem Fall unter der 80-Zeichen Grenze für eine Zeile bleiben kann.

Ich sehe das eher als Wink das man nach dem man die beiden Dateien geöffnet hat, die Verarbeitung in einer Funktion verschwinden lassen sollte, und nicht noch mehrere Ebenen zusätzlich in dem inneren ``with``-Block einrücken sollte.

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 02:23
von diesch
BlackJack hat geschrieben:Die Syntax hatten sie sich für meinen Geschmack sparen können, weil man damit eigentlich in keinem Fall unter der 80-Zeichen Grenze für eine Zeile bleiben kann.
Man kann es auf mehrere Zeilen aufteilen:

Code: Alles auswählen

with open(inputfile, encoding="utf-8") as f, \
     open(outputfile, "a", encoding="utf-8") as g:

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 02:56
von BlackJack
@diesch: Dann kann man es auch auf mehrere Zeilen aufteilen. Die \-Syntax mag ich auch nicht. :-)

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 03:26
von diesch
@BlackJack: Du kannst auch Klammern nehen, aber die gefallen dir vermutlich auch nicht ;-)

Ich halte es für sinnvoll, nur einen with-Ausdruck zu verwenden, weil damit direkt klar ist, dass da eigentlich nichts verschachtelt wird, sondern alle Objekte für den Block benötigt werden.

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 11:19
von /me
diesch hat geschrieben:@BlackJack: Du kannst auch Klammern nehen, aber die gefallen dir vermutlich auch nicht ;-)
Klammern halte ich für die bessere Wahl Bei einem Backslash muss nur ein im Editor unsichtbares Leerzeichen folgen und schon funktioniert es nicht mehr.

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 12:03
von BlackJack
@diesch: Kann ich Klammern nehmen? Wo sollte ich die bei dem Ausdruck denn setzen?

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 13:09
von /me
BlackJack hat geschrieben:@diesch: Kann ich Klammern nehmen? Wo sollte ich die bei dem Ausdruck denn setzen?
Beim with-Statement geht's natürlich nicht.

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 13:19
von Hellstorm
BlackJack hat geschrieben:Die Syntax hatten sie sich für meinen Geschmack sparen können, weil man damit eigentlich in keinem Fall unter der 80-Zeichen Grenze für eine Zeile bleiben kann.

Ich sehe das eher als Wink das man nach dem man die beiden Dateien geöffnet hat, die Verarbeitung in einer Funktion verschwinden lassen sollte, und nicht noch mehrere Ebenen zusätzlich in dem inneren ``with``-Block einrücken sollte.
Wobei mir die 80-Zeichen-Grenze unglaublich knapp erscheint, besonders wenn man deinem Ratschlag folgt und immer aussagekräftige, lange Bezeichner verwendet. Da muss man praktisch immer die Zeilen umbrechen.

Welche Programme brauchen denn unbedingt zwangshaft die 80-Zeichen-Grenze? Würden es nicht auch 120 oder 140 Zeichen tun?

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 13:47
von /me
Hellstorm hat geschrieben:Wobei mir die 80-Zeichen-Grenze unglaublich knapp erscheint, besonders wenn man deinem Ratschlag folgt und immer aussagekräftige, lange Bezeichner verwendet. Da muss man praktisch immer die Zeilen umbrechen.
Die 80 (bzw. 79) Zeichen sind eine grundsätzliche Empfehlung aus PEP-8, kein Gesetz. Dir steht es frei längere Zeilen zu verwenden, allerdings solltest du das, insbesondere wenn du Code mit anderen austauscht, nur sehr sparsam tun.

PEP-8 sagt dazu: "Some teams strongly prefer a longer line length. For code maintained exclusively or primarily by a team that can reach agreement on this issue, it is okay to increase the nominal line length from 80 to 100 characters (effectively increasing the maximum length to 99 characters), provided that comments and docstrings are still wrapped at 72 characters."

Ich selber habe nur sehr selten das Problem, dass meine Zeilen länger als 80 Zeichen würden. Häufig ist das für mich ein Hinweis darauf, die Programmstruktur noch mal zu überdenken.

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 13:48
von cofi
@Hellstorm, Die Einschraenkung gibt es nicht fuer Programme sondern fuer die Maschine vor dem Bildschirm.

PEP8 gibt auch die Gruende dafuer an sich zu begrenzen. Zuletzt gab es hierfuer ein Update, das auch die Zeichenzahl angefasst hat: http://hg.python.org/peps/rev/fb24c80e9afb#l1.95

Ich persoenlich wuerde die Grenze aber weniger an Zahlen festmachen, sondern sie moeglichst kurz halten, soweit es der Lesbarkeit nicht abtraeglich ist. Da koennen durchaus auch mal Zeilen mit 120 Zeichen besser als 4 Zeilen um das gleiche zu erreichen.

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 13:50
von BlackJack
@Hellstorm: Lang kommt im meinem Ratschlag eigentlich nicht vor, nur länger als ein oder zwei Zeichen und aussagekräftig. Ein kurzer aussagekräftiger Name ist besser als ein langer aussagekräftiger Name. ;-)

Und wenn Du dann praktisch immer Zeilen umbrechen musst, dann hast Du viele, ziemlich lange Zeilen. Dann würde ich nicht einmal mit Programmen, sondern zuerst mit Menschen argumentieren. Im Textsatz hat sich über Jahrhunderte eine Grenze von ca. 60 Zeichen pro Zeile durchgesetzt, weil alles was länger ist, für Menschen schwieriger zu lesen wird, weil das zurückwandern des Blicks zum einen den Lesefluss stört und zum anderen es leichter passiert dass man in der Zeile verrutscht, wenn die Zeilen zu lang werden.

Ansonsten ist *das* Programm was standardmässig 80 Zeichen pro Zeile hat, das Terminal. Viele Texteditoren können eine senkrechte Linie bei einer vorgegebenen Spalte anzeigen, als Hinweis. Voreinstellung in der Regel 80 Zeichen.

Webforen oder Blogs: Da muss man bei Code mit langen Zeilen plötzlich horizontal scrollen. Oder noch schlimmer: Der Beitragstext wird auch auf die Breite gezogen und wird damit als Fliesstext dann wirklich schwerer lesbar. In Textdokumenten lässt sich so ein Quelltext auch schlecht einbinden. Die übliche Praxis da dann mit einem speziellen Kennzeichen die Zeilen umzubrechen ist teilweise *wirklich* schwer zu lesen.

Und zu guter letzt: Was ist am umbrechen denn schlimm? IMHO erhöht es die lesbarkeit wenn nicht alles in elend langen Zeilen steckt. Es kann auch dazu anregen über zu *lange* Namen nachzudenken. Oder ob ein Ausdruck nicht vielleicht zu komplex ist, und irgendwie aufgeteilt werden kann. Sei das nun lokale Namen für Teilausdrücke einzuführen, oder in eine Funktion oder Methode zu verschieben. Und manchmal kann man darüber Nachdenken ob ein Aufruf tatsächlich so viele Argumente braucht.

Re: Dateien öffnen

Verfasst: Sonntag 3. November 2013, 16:01
von Hellstorm
Naja ich sehe vor allem bei Python das Problem, dass man ja immer mit 4 Leerzeichen einrückt. Wenn man dann in einer Funktion einer Klasse in irgendeiner if-Abfrage einer Schleife steckt und dort dann einen String in eine Funktion mit einigen Parametern schreiben möchte, kann es bei 80 Zeichen imho doch schon echt arg knapp werden, ohne dass es unbedingt unübersichtlich ist.