Dateien lesen und schreiben

Dateien lesen und schreiben#

Klein 2021: Python 3

  • Kap. 12: Dateien lesen und schreiben

Schreiben und Einlesen einer Text-Datei#

So geht es: https://www.freecodecamp.org/news/with-open-in-python-with-statement-syntax-example/ . Wir lernen:

  • Die Funktionen open() und close() verwenden wir nicht;

  • besser verwenden wir with().

Wir schauen uns das nochmal genauer an.

Die folgende Zelle erzeugt uns eine Text-Datei:

  • drei Zeilen,

  • mit Umlauten,

  • die letzte Zeile ohne ein \n am Ende.

Dazu wird ein Objekt my_file erzeugt, das über seine Methode write() die Datei neu anlegt und (hier zeilenweise) nacheinander befüllt.

with open("hello.txt", "w") as my_file:
    my_file.write("Hallo Welt!\n")
    my_file.write("Wie bist Du doch")
    my_file.write(" schön und hässlich zugleich.\n")
    my_file.write("Schöne Grüße!")

Diese Datei liegt dann im selben Verzeichnis wie das vorliegende Notebook. Aufgabe:

  • minimal: mit einem Text-Editor anschauen

  • explorativ: gerne auch verändern, unter anderem Namen wieder speichern, ggf. untigen Dateinamen dann anpassen

So lesen wir diese Datei zeilenweise wieder ein:

zeilen_mit_newline = []

with open("hello.txt") as my_file:
    for line in my_file:
        zeilen_mit_newline.append(line)

zeilen_mit_newline
['Hallo Welt!\n',
 'Wie bist Du doch schön und hässlich zugleich.\n',
 'Schöne Grüße!']

Wir stellen fest, dass beim zeilenweisen Einlesen die \n erhalten bleiben.

Im Normalfall lesen eine Datei aber lieber komplett ein:

with open("hello.txt") as my_file:
    text = my_file.read()

text
'Hallo Welt!\nWie bist Du doch schön und hässlich zugleich.\nSchöne Grüße!'

Die einzelnen Zeilen – aber ohne die \n – erhalten wir dann über ein split() über die Newlines:

# nicht so gut:zeilen = text.split("'\n'")
# besser:
zeilen = text.splitlines()
zeilen
['Hallo Welt!',
 'Wie bist Du doch schön und hässlich zugleich.',
 'Schöne Grüße!']

JSON#

(Vorschau, nicht mehr in Python-101)

Quelle: https://www.programiz.com/python-programming/json

Wir lesen im folgenden eine JSON aus einer Datei ein, verändern einen einzelnen Wert, und schreiben das Resultat als neue JSON-Datei heraus.

import json

path_to_file = "json-beispiel42.ipynb" # ipynb werden im json-Format gespeichert
with open(path_to_file, 'r') as f:
  data = json.load(f)
data['cells']
[{'cell_type': 'markdown',
  'id': '64fbc19b',
  'metadata': {},
  'source': ['# json-beispiel42\n',
   '\n',
   'Beispiel zu JSON. Die Datei {doc}`json-beispiel42` wird durch das Notebook {doc}`e_Dateien-lesen-schreiben` gelesen, geändert und unter dem neuem Dateinamen {doc}`json-beispiel42_AUTO` wieder geschrieben.']},
 {'cell_type': 'code',
  'execution_count': 3,
  'id': '962e258a',
  'metadata': {},
  'outputs': [],
  'source': ['if True:\n', '    Antwort = 42']},
 {'cell_type': 'code',
  'execution_count': 4,
  'id': '39b70b20',
  'metadata': {},
  'outputs': [{'name': 'stdout',
    'output_type': 'stream',
    'text': ['Antwort: 42\n']}],
  'source': ['print("Antwort:", Antwort)']}]
data['cells'][1]['source'] = ['sechs = 6\n', 'sieben = 7\n', 'if True:\n', '    Antwort = ...\n']
with open('json-beispiel42_AUTO.ipynb', 'w') as json_file:
  json.dump(data, json_file)