|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# Software Entwicklung \n",
- "\n",
- "## Kapitel 9: IO\n",
- "\n",
- "### 9.4 Dateien lesen\n",
- "\n",
- "Bei großen Dateien sollte vom vollständigen Einlesen mittels\n",
- "<code>read</code> Abstand genommen werden, weil dann\n",
- "der gesamte Dateiinhalt im Speicher gehalten werden muss.\n",
- "Vielmehr sollte in diesem Fall der Inhalt sukzessive eingelesen\n",
- "werden."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Zu diesem Zweck kann <code>read</code> mit einem Parameter\n",
- "aufgerufen werden, der die maximale Anzahl Bytes angibt,\n",
- "die gelesen werden sollen."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "with open(\"091a Textdatei\", \"r\") as f:\n",
- " block_size = 10\n",
- " block = f.read(block_size)\n",
- "\n",
- " while len(block)>0:\n",
- " print(block, end='*')\n",
- " block = f.read(block_size)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Man kann sich das schrittweise Einlesen der Datei mit Hilfe\n",
- "eines Schreib-/Lesekopfs vorstellen, der sich\n",
- "entlang eines Stroms von Bytes bzw. Zeichen bewegt.\n",
- "Jeder Lesevorgang bewegt den Kopf um die Anzahl der\n",
- "gelesenen Zeichen vorwärts. Die Position des Kopfs\n",
- "innerhalb der Datei kann mittels <code>tell</code>\n",
- "ermittelt werden."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "with open(\"091a Textdatei\", \"r\") as f:\n",
- " block_size = 10\n",
- " block = f.read(block_size)\n",
- "\n",
- " while len(block)>0:\n",
- " print(block, end='')\n",
- " pos = f.tell()\n",
- " print(f\"<{pos}>\", end='')\n",
- " block = f.read(block_size)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Die Position des Schreib-/Lesekopfs lässt sich auch\n",
- "durch die Methode <code>seek</code> verändern."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "with open(\"091a Textdatei\", \"r\") as f:\n",
- " f.seek(110)\n",
- " print(f.read())"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Textdateien sind i.d.R. in Zeilen aufgeteilt, die jeweils\n",
- "mit einem Zeilenendezeichen abschließen. Die Methode\n",
- "<code>readline</code> liest aus einer Textdatein\n",
- "die Daten bis zum nächsten Zeilenende."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "with open(\"091a Textdatei\", \"r\") as f:\n",
- " line = f.readline()\n",
- " while len(line)>0:\n",
- " print(line, end='')\n",
- " line = f.readline()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Diese häufig benötigte Variante des Lesens einer Textdatei\n",
- "kann in Python auch mittels einer <code>for</code>-Schleife\n",
- "realisiert werden."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "pycharm": {
- "name": "#%%\n"
- }
- },
- "outputs": [],
- "source": [
- "with open(\"091a Textdatei\", \"r\") as f:\n",
- " for line in f:\n",
- " print(line, end='')"
- ]
- }
- ],
- "metadata": {
- "celltoolbar": "Slideshow",
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.9"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
- }
|