Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #5289
| From | Achim Herwig <python@wodca.de> |
|---|---|
| Newsgroups | de.comp.lang.python |
| Subject | Re: [Python-de] einheitliches Vorgehen beim Öffnen von Dateien. |
| Date | 2018-10-18 12:23 +0200 |
| Message-ID | <mailman.234.1539858787.2799.python-de@python.org> (permalink) |
| References | <90674f1b-f3c2-04c2-f50c-f306c5ea1a88@thomas-guettler.de> <13eb3966-f92c-9bdf-db4a-072c34fdc1f4@sschwarzer.net> <46F78FAB-3D9E-46DA-97D8-07762AD5F1C7@wodca.de> |
Hi, ich würde in jedem Fall auf pathlib umsteigen (für Python 2 als Paket installierbar [1]), für neuen Code nur noch diese Funktionalität verwenden und alten Code dort umstellen wo er wieder angefasst wird. Ganze Dateien kann man mit read_text() ode read_bytes() direkt lesen ohne sich um Dateideskriptorenlecks sorgen zu müssen, ansonsten würde ich auch unbedingt die Verwendung von with empfehlen. VG, Achim. [1] https://pypi.org/project/pathlib2/ > Am 18.10.2018 um 12:00 schrieb Stefan Schwarzer <sschwarzer@sschwarzer.net>: > > On 18/10/2018 09.59, Thomas Güttler wrote: >> So lange wir Python2 unterstützen soll io.open() verwendet werden. > > Ich finde Peters Vorschlag mit > > from io import open > > sympathisch, weil man dann später bei ausschließlicher > Python-3-Unterstützung nur das Import-Statement löschen > muss, aber sonst keinen Code ändern muss. > >> Wenn man nur den Inhalt braucht, dann ist diese einfache Variante zulässig (ohne with-Statement) >> >> content = io.open(my_file, 'rt').read() >> >> Auch beim Schreiben? > > Ich schließe mich hier den anderen nachdrücklich an: > Die Datei sollte immer ordentlich geschlossen werden, > egal ob beim Lesen oder Schreiben. Beim Lesen wäre > das explizite Schließen vielleicht nicht ganz so > wichtig, was Datenverluste angeht. Aber ich halte es > trotzdem für guten Stil, explizit "hinter sich > aufzuräumen". > > Die Verwendung eines `with`-Blocks hat auch den Vorteil, > dass der Leser danach weiß, dass dieses Dateiobjekt > nicht mehr für I/O verwendet wird. (Ich schätze, > theoretisch kann man dann immer noch auf `.name` > zugreifen, würde das aber für schlechten Stil halten.) > >> Die Variable wird „f“ genannt: >> >> with io.open(my_file, 'wt') as f: >> f.write(...) > > Ich verwende meist `fobj`. Wenn man den Bezeichner > abseits vom `with`-Block sieht, ist damit klar, dass > `f` kein Dateiname ist, sondern ein Dateiobjekt. > > Leider werden `f` und `file` mitunter sowohl für > Dateinamen (manchmal auch Pfade) als auch für > Dateiobjekte verwendet. > > Apropos: Dateinamen bzw. -pfade benenne ich zur > Abgrenzung von Dateiobjekten mit `..._name` bzw. > `..._path`. > >> So wird das meist in der Python-Doku gemacht: Bsp: Methods of File Objects > > Ich glaube, mit Bezeichnern (und anderen Konventionen) > in der Python-Doku und Tutorials sollte man immer > vorsichtig sein. Da geht es ja normalerweise darum, "mal > eben" etwas zu zeigen. Das heißt aber nicht, dass man > dieselben Muster für Produktions-Code verwenden sollte. > >> Der with-Block nach dem Open sollte kurz sein. Also nicht länger etwa 6 Zeilen. > > Lieber ein langer `with`-Block als keine sauber > geschlossenen Dateien. ;-) Aber ja, lange Blöcke machen > den Code leicht unübersichtlich, vor allem wenn sie > verschachtelt sind. Im Zweifelsfall fände ich aber einen > längeren `with`-Block besser als den Code besonders > kompakt zu schreiben, nur um unter dem Zeilen-Limit zu > bleiben. > > Viele Grüße > Stefan > _______________________________________________ > python-de maillist - python-de@python.org > https://mail.python.org/mailman/listinfo/python-de -- Achim Herwig <achim.herwig@wodca.de> 80997 München, Germany, +49 176 802 393 58
Back to de.comp.lang.python | Previous | Next | Find similar
Re: [Python-de] einheitliches Vorgehen beim Öffnen von Dateien. Achim Herwig <python@wodca.de> - 2018-10-18 12:23 +0200
csiph-web