<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=CSV_JSON_und_technische_Daten_mit_Python_verarbeiten</id>
	<title>CSV JSON und technische Daten mit Python verarbeiten - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://staging.moocwiki.org/index.php?action=history&amp;feed=atom&amp;title=CSV_JSON_und_technische_Daten_mit_Python_verarbeiten"/>
	<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=CSV_JSON_und_technische_Daten_mit_Python_verarbeiten&amp;action=history"/>
	<updated>2026-10-22T08:54:48Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MOOCsWiki Staging</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://staging.moocwiki.org/index.php?title=CSV_JSON_und_technische_Daten_mit_Python_verarbeiten&amp;diff=72906&amp;oldid=prev</id>
		<title>Glanz: AI MOOC Plugin f1dc2745e6824ae85a187bafd5a7819f</title>
		<link rel="alternate" type="text/html" href="https://staging.moocwiki.org/index.php?title=CSV_JSON_und_technische_Daten_mit_Python_verarbeiten&amp;diff=72906&amp;oldid=prev"/>
		<updated>2026-10-21T22:10:31Z</updated>

		<summary type="html">&lt;p&gt;AI MOOC Plugin f1dc2745e6824ae85a187bafd5a7819f&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{T}}&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Einleitung =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Auftrag:&amp;#039;&amp;#039;&amp;#039; Entwickle einen lokalen &amp;#039;&amp;#039;&amp;#039;Messreihen-Importer mit Fehlerbericht&amp;#039;&amp;#039;&amp;#039; für künstliche Prüfdaten eines ungefährlichen Lehrbauteils. Du liest Daten, prüfst sie anhand eines vorher festgelegten Datenvertrags und exportierst gültige Messwerte und Fehler getrennt. Du steuerst keine echte Maschine; die App trifft keine Sicherheits- oder Freigabeentscheidung.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Zielgruppe:&amp;#039;&amp;#039;&amp;#039; Auszubildende im 1. bis 2. Ausbildungsjahr. &amp;#039;&amp;#039;&amp;#039;Voraussetzung:&amp;#039;&amp;#039;&amp;#039; Dateien und Maßeinheiten verstehen; Programmierkenntnisse sind nicht nötig. &amp;#039;&amp;#039;&amp;#039;Dauer:&amp;#039;&amp;#039;&amp;#039; etwa vier bis sechs Unterrichtseinheiten. Du brauchst nur einen lokalen Computer, Python 3.14 oder neuer und einen Texteditor. Die Übungen laufen ohne Internet, bezahltes KI-Konto oder echte Betriebsdaten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorwissen aktivieren:&amp;#039;&amp;#039;&amp;#039; Was bedeuten Datei, Ordner, Dezimalzahl und Millimeter? Weshalb ist „12.4“ ohne Einheit nicht eindeutig? Als vorhandene Grundlage wurde [https://moocwiki.org/index.php?curid=60727 dieser MOOCwiki-Kurs] angegeben; sein Seiteninhalt konnte beim Abruf nicht verifiziert werden. Deshalb setzt dieser Kurs keine daraus abgeleiteten Spezialkenntnisse voraus.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nach dem Lernen kannst du&amp;#039;&amp;#039;&amp;#039; CSV und JSON erklären, synthetische Messreihen mit Python importieren, die drei Kernregeln &amp;#039;&amp;#039;&amp;#039;fehlende Einheit melden, ungültige Zahl trennen, Herkunft erhalten&amp;#039;&amp;#039;&amp;#039; testen, gültige Werte auswerten und einen eigenen Fehlerfall anhand eines Datenvertrags begründen. Lernweg: Verständnis → geführtes Programm → eigener Transfer.&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Datenformate und Messwerte verstehen =&lt;br /&gt;
{{BR}}&lt;br /&gt;
== CSV: Datensätze als Zeilen ==&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;CSV-Datei&amp;#039;&amp;#039;&amp;#039; enthält tabellarische Textdaten: eine Kopfzeile und Datenzeilen. Der Name CSV bedeutet Comma-Separated Values, aber als Trennzeichen kann auch ein Semikolon vereinbart werden. In der deutschen Praxis wird dies oft gewählt, weil Kommas als Dezimaltrennzeichen vorkommen. In &amp;#039;&amp;#039;&amp;#039;unserem Datenvertrag&amp;#039;&amp;#039;&amp;#039; gilt explizit: Semikolon trennt Spalten; Dezimalpunkt trennt ganze und gebrochene Zahlen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Kopfzeile: messwert_id;wert;einheit;quelle. Ein &amp;#039;&amp;#039;&amp;#039;Feld&amp;#039;&amp;#039;&amp;#039; ist der Eintrag in einer Spalte. CSV enthält zunächst Text: Das Feld 12.4 wird erst durch eine kontrollierte Umwandlung zur Zahl. Für Trennzeichen oder Zeilenumbrüche in Textfeldern kennt CSV Anführungszeichenregeln. Darum niemals naiv an jedem Semikolon mit split trennen, sondern das Modul csv verwenden.&lt;br /&gt;
&lt;br /&gt;
[[File:CsvDelimited001.svg|260px|frameless|center|alt=Symbol einer CSV-Textdatei mit getrennten Werten|CSV-Dateisymbol, Beschriftung im Original englisch]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alternative zum Bild:&amp;#039;&amp;#039;&amp;#039; Stell dir die vier Spalten messwert_id, wert, einheit und quelle vor, mit einer Messung je Zeile.&lt;br /&gt;
[[File:Example CSV file.png|480px|frameless|center|alt=Darstellung einer CSV-Datei mit Kopfzeile und Datenzeilen|Beispiel einer CSV-Tabelle, andere Testdaten als im Projekt]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alternative zum Bild:&amp;#039;&amp;#039;&amp;#039; Eine Kopfzeile beschreibt die Spalten; darunter stehen mehrere getrennte Datenzeilen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== JSON: Daten mit Struktur ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JSON&amp;#039;&amp;#039;&amp;#039; bedeutet JavaScript Object Notation. Es stellt strukturierte Objekte und Listen als Text dar. Zu einem Zahlenwert können die Einheit, die Quellenangabe und ein Fehlercode als eigene benannte Elemente gehören. In Python entsprechen JSON-Objekte meist Wörterbüchern (dict) und JSON-Listen Python-Listen. JSON ist nicht automatisch vertrauenswürdig: Auch JSON-Eingaben müssen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
[[File:Example json code.png|450px|frameless|center|alt=Ausschnitt von JSON-Code mit geschweiften Klammern und Schlüsseln|JSON-Codebeispiel, Beschriftung im Original englisch]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alternative zum Bild:&amp;#039;&amp;#039;&amp;#039; Ein JSON-Objekt könnte die Schlüssel „wert“, „einheit“ und „quelle“ mit den Werten 12.4, mm und simulator-a enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vergleich:&amp;#039;&amp;#039;&amp;#039; CSV ist einfach für viele gleichartige Zeilen; JSON ist besser für strukturierte Fehlerlisten mit mehreren Ursachen und verschachtelten Herkunftsangaben. Nutze [https://de.wikipedia.org/wiki/Comma-separated_values den Artikel zu CSV] und [https://de.wikipedia.org/wiki/JavaScript_Object_Notation den Artikel zu JSON] als optionalen Nachschlageeinstieg.&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Datenvertrag und synthetische Testreihe =&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Die Schnittstellenregeln schriftlich festlegen ==&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Datenvertrag&amp;#039;&amp;#039;&amp;#039; ist eine klare Vereinbarung über erwartete Felder, Typen, Einheiten und Reaktionen bei Fehlern. Unsere Unterrichtsversion &amp;#039;&amp;#039;&amp;#039;Lehrvertrag 1.0&amp;#039;&amp;#039;&amp;#039; gilt vor dem ersten Import:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Gegenstand !! Verbindliche Erwartung !! Fehlerreaktion&lt;br /&gt;
|-&lt;br /&gt;
| Kopfzeile || messwert_id;wert;einheit;quelle, genau in dieser Reihenfolge || Dateiimport mit erklärbarer Meldung abbrechen&lt;br /&gt;
|-&lt;br /&gt;
| Zeichensatz || UTF-8 oder UTF-8 mit BOM, Semikolon als Trennzeichen || nicht passende Datei nicht still umdeuten&lt;br /&gt;
|-&lt;br /&gt;
| messwert_id || nicht leer || Zeile beanstanden&lt;br /&gt;
|-&lt;br /&gt;
| wert || endliche Dezimalzahl mit Punkt || ungültige Zahl getrennt protokollieren&lt;br /&gt;
|-&lt;br /&gt;
| einheit || explizit mm || fehlende Einheit anders als eine falsche Einheit melden&lt;br /&gt;
|-&lt;br /&gt;
| quelle || nicht leer || Fehler mit Originaldatensatz protokollieren&lt;br /&gt;
|-&lt;br /&gt;
| Herkunft || Dateiname, physische Zeile, Quelle und bei Fehlern Originalfelder || bei jeder Weitergabe erhalten&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Datenvertrag statt stiller Fehlerkorrektur:&amp;#039;&amp;#039;&amp;#039; Eine fehlende Einheit wird nicht geraten, eine Zeichenfolge wie „abc“ nicht zu 0 und eine Kommazahl nicht ohne vereinbarte Regel umgewandelt. Nur eine dokumentierte Änderung des Datenvertrags erlaubt neue Formate.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Fünf synthetische Datensätze ==&lt;br /&gt;
Erstelle die Datei &amp;#039;&amp;#039;&amp;#039;messwerte.csv&amp;#039;&amp;#039;&amp;#039; in einem neuen Ordner. Diese Daten stammen von erfundenen Simulatoren und haben keinerlei Bezug zu einer echten Maschine:&lt;br /&gt;
 messwert_id;wert;einheit;quelle&lt;br /&gt;
 A01;12.4;mm;simulator-a&lt;br /&gt;
 A02;12.6;;simulator-a&lt;br /&gt;
 A03;nicht_messbar;mm;simulator-b&lt;br /&gt;
 A04;12.2;mm;simulator-b&lt;br /&gt;
 A05;12.8;mm;simulator-c&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Denkprobe:&amp;#039;&amp;#039;&amp;#039; A02 hat keine Einheit, A03 keine gültige Zahl. Beide dürfen nicht im Mittelwert landen. A01, A04 und A05 besitzen 12.4, 12.2 und 12.8 mm. Der Mittelwert ist ungefähr 12.467 mm. Frage nach: Warum müsste die Fehlerliste trotzdem Informationen über A02 und A03 aufbewahren?&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Python-Grundbegriffe und erster Import ==&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;Variable&amp;#039;&amp;#039;&amp;#039; trägt einen Namen für einen Wert. Eine &amp;#039;&amp;#039;&amp;#039;Schleife&amp;#039;&amp;#039;&amp;#039; wiederholt einen Verarbeitungsschritt. Eine &amp;#039;&amp;#039;&amp;#039;Liste&amp;#039;&amp;#039;&amp;#039; sammelt mehrere Elemente. Ein &amp;#039;&amp;#039;&amp;#039;Wörterbuch&amp;#039;&amp;#039;&amp;#039; verbindet Schlüssel wie „wert“ mit einem Feldinhalt. Python bringt die Module csv, json und math in seiner Standardbibliothek mit.&lt;br /&gt;
&lt;br /&gt;
Speichere als &amp;#039;&amp;#039;&amp;#039;erster_test.py&amp;#039;&amp;#039;&amp;#039; im selben Ordner:&lt;br /&gt;
 import csv&lt;br /&gt;
 with open(&amp;quot;messwerte.csv&amp;quot;, encoding=&amp;quot;utf-8-sig&amp;quot;, newline=&amp;quot;&amp;quot;) as datei:&lt;br /&gt;
     leser = csv.DictReader(datei, delimiter=&amp;quot;;&amp;quot;)&lt;br /&gt;
     for zeile in leser:&lt;br /&gt;
         print(zeile[&amp;quot;messwert_id&amp;quot;], zeile[&amp;quot;wert&amp;quot;], zeile[&amp;quot;einheit&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
Starte lokal mit &amp;#039;&amp;#039;&amp;#039;python erster_test.py&amp;#039;&amp;#039;&amp;#039;. DictReader liest je Zeile ein Wörterbuch, delimiter definiert das Semikolon und newline=&amp;quot;&amp;quot; überlässt die Behandlung der Zeilenenden dem CSV-Modul. Das gedruckte Ergebnis ist &amp;#039;&amp;#039;&amp;#039;noch keine Qualitätsprüfung&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=lDk2uuRTusY|500|center}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Video (deutsch):&amp;#039;&amp;#039;&amp;#039; Ingo Janssen, „CSV Dateien einfach lesen und schreiben?“ (24.09.2020). &amp;#039;&amp;#039;&amp;#039;Offline-Alternative:&amp;#039;&amp;#039;&amp;#039; Führe das oben abgedruckte Beispiel aus und lies den Unterschied zwischen A01 und A02 aus der Ausgabe ab.&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Den Messreihen-Importer programmieren =&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Geführtes vollständiges Beispiel ==&lt;br /&gt;
Lege &amp;#039;&amp;#039;&amp;#039;importer.py&amp;#039;&amp;#039;&amp;#039; im gleichen Ordner an. Der Code nutzt nur Standardbibliotheken, trennt Datensätze und erzeugt &amp;#039;&amp;#039;&amp;#039;ergebnis.json&amp;#039;&amp;#039;&amp;#039; sowie &amp;#039;&amp;#039;&amp;#039;fehlerbericht.json&amp;#039;&amp;#039;&amp;#039;. In einer Python-Datei bedeuten Einrückungen die Zugehörigkeit zum Programmblock.&lt;br /&gt;
&lt;br /&gt;
 import csv&lt;br /&gt;
 import json&lt;br /&gt;
 import math&lt;br /&gt;
 from pathlib import Path&lt;br /&gt;
&lt;br /&gt;
 QUELLDAT = Path(&amp;quot;messwerte.csv&amp;quot;)&lt;br /&gt;
 FELDER = [&amp;quot;messwert_id&amp;quot;, &amp;quot;wert&amp;quot;, &amp;quot;einheit&amp;quot;, &amp;quot;quelle&amp;quot;]&lt;br /&gt;
 gueltig = []&lt;br /&gt;
 fehler = []&lt;br /&gt;
&lt;br /&gt;
 with QUELLDAT.open(encoding=&amp;quot;utf-8-sig&amp;quot;, newline=&amp;quot;&amp;quot;) as datei:&lt;br /&gt;
     leser = csv.DictReader(datei, delimiter=&amp;quot;;&amp;quot;)&lt;br /&gt;
     if leser.fieldnames != FELDER:&lt;br /&gt;
         raise ValueError(&amp;quot;Abweichende Kopfzeile: Import gestoppt&amp;quot;)&lt;br /&gt;
     for zeile in leser:&lt;br /&gt;
         original = dict(zeile)&lt;br /&gt;
         gruende = []&lt;br /&gt;
         id_text = (zeile.get(&amp;quot;messwert_id&amp;quot;) or &amp;quot;&amp;quot;).strip()&lt;br /&gt;
         quelltext = (zeile.get(&amp;quot;quelle&amp;quot;) or &amp;quot;&amp;quot;).strip()&lt;br /&gt;
         einheit = (zeile.get(&amp;quot;einheit&amp;quot;) or &amp;quot;&amp;quot;).strip()&lt;br /&gt;
         rohwert = (zeile.get(&amp;quot;wert&amp;quot;) or &amp;quot;&amp;quot;).strip()&lt;br /&gt;
         if None in zeile or any(v is None for v in zeile.values()):&lt;br /&gt;
             gruende.append(&amp;quot;spaltenzahl_ungueltig&amp;quot;)&lt;br /&gt;
         if not id_text:&lt;br /&gt;
             gruende.append(&amp;quot;kennung_fehlt&amp;quot;)&lt;br /&gt;
         if not quelltext:&lt;br /&gt;
             gruende.append(&amp;quot;quelle_fehlt&amp;quot;)&lt;br /&gt;
         if not einheit:&lt;br /&gt;
             gruende.append(&amp;quot;einheit_fehlt&amp;quot;)&lt;br /&gt;
         elif einheit != &amp;quot;mm&amp;quot;:&lt;br /&gt;
             gruende.append(&amp;quot;einheit_nicht_erlaubt&amp;quot;)&lt;br /&gt;
         try:&lt;br /&gt;
             zahl = float(rohwert)&lt;br /&gt;
             if not math.isfinite(zahl):&lt;br /&gt;
                 gruende.append(&amp;quot;zahl_nicht_endlich&amp;quot;)&lt;br /&gt;
         except ValueError:&lt;br /&gt;
             zahl = None&lt;br /&gt;
             gruende.append(&amp;quot;zahl_ungueltig&amp;quot;)&lt;br /&gt;
         herkunft = {&amp;quot;datei&amp;quot;: QUELLDAT.name,&lt;br /&gt;
                     &amp;quot;zeile&amp;quot;: leser.line_num, &amp;quot;quelle&amp;quot;: quelltext}&lt;br /&gt;
         if gruende:&lt;br /&gt;
             fehler.append({&amp;quot;id&amp;quot;: id_text, &amp;quot;gruende&amp;quot;: gruende,&lt;br /&gt;
                            &amp;quot;herkunft&amp;quot;: herkunft, &amp;quot;original&amp;quot;: original})&lt;br /&gt;
         else:&lt;br /&gt;
             gueltig.append({&amp;quot;id&amp;quot;: id_text, &amp;quot;wert&amp;quot;: zahl,&lt;br /&gt;
                             &amp;quot;einheit&amp;quot;: einheit, &amp;quot;herkunft&amp;quot;: herkunft})&lt;br /&gt;
&lt;br /&gt;
 mittel = (sum(x[&amp;quot;wert&amp;quot;] for x in gueltig) / len(gueltig)&lt;br /&gt;
           if gueltig else None)&lt;br /&gt;
 ergebnis = {&amp;quot;vertrag&amp;quot;: &amp;quot;Lehrvertrag 1.0&amp;quot;,&lt;br /&gt;
             &amp;quot;anzahl_gueltig&amp;quot;: len(gueltig),&lt;br /&gt;
             &amp;quot;mittelwert_mm&amp;quot;: mittel,&lt;br /&gt;
             &amp;quot;messwerte&amp;quot;: gueltig}&lt;br /&gt;
 with open(&amp;quot;ergebnis.json&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as datei:&lt;br /&gt;
     json.dump(ergebnis, datei, ensure_ascii=False, indent=2)&lt;br /&gt;
 with open(&amp;quot;fehlerbericht.json&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as datei:&lt;br /&gt;
     json.dump(fehler, datei, ensure_ascii=False, indent=2)&lt;br /&gt;
 print(&amp;quot;Gültig:&amp;quot;, len(gueltig), &amp;quot;Fehler:&amp;quot;, len(fehler))&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Erklärung:&amp;#039;&amp;#039;&amp;#039; try/except fängt die ungültige Zahl ab. math.isfinite verhindert, dass inf oder nan in die Auswertung gelangen. Das &amp;#039;&amp;#039;&amp;#039;original&amp;#039;&amp;#039;&amp;#039;-Wörterbuch hält beanstandete Eingabefelder unverändert fest. &amp;#039;&amp;#039;&amp;#039;herkunft&amp;#039;&amp;#039;&amp;#039; enthält den lokalen Dateinamen, die physische Zeilennummer und die Quelle. Jedes Problem bekommt einen eindeutigen Fehlercode. json.dump schreibt strukturierte Ausgabedateien, ensure_ascii=False erhält Umlaute.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Grenzen:&amp;#039;&amp;#039;&amp;#039; Fehlerhaft kodierte Dateien oder abweichende Kopfzeilen stoppen das einfache Programm; eine professionelle App müsste diese Abbruchursachen ebenfalls als Importstatus erfassen. Bei mehrzeiligen CSV-Textfeldern beschreibt leser.line_num die zuletzt gelesene physische Zeile, nicht zwingend die fortlaufende Datensatznummer. Begrenze in einer erweiterten Version Dateigröße und Leserechte, ohne sensible Daten einzulesen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Drei verbindliche Akzeptanztests ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test „fehlende Einheit melden“:&amp;#039;&amp;#039;&amp;#039; In Zeile A02 ist die Einheit leer. Prüfe, dass sie nicht in ergebnis.json steht, dafür in fehlerbericht.json mit &amp;#039;&amp;#039;&amp;#039;einheit_fehlt&amp;#039;&amp;#039;&amp;#039; und dem ursprünglichen Datensatz.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test „ungültige Zahl trennen“:&amp;#039;&amp;#039;&amp;#039; In Zeile A03 steht nicht_messbar. Prüfe den Fehlercode &amp;#039;&amp;#039;&amp;#039;zahl_ungueltig&amp;#039;&amp;#039;&amp;#039;. Der Originaltext bleibt erhalten, und ein erfundener Ersatzwert 0 wird nicht in die Statistik aufgenommen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Test „Herkunft erhalten“:&amp;#039;&amp;#039;&amp;#039; Die gültigen Einträge A01, A04, A05 behalten die Quelle simulator-a, simulator-b, simulator-c sowie den Dateinamen und ihre physische Zeile. Auch die beiden Fehler tragen Herkunftsangaben. Das ist der Grund, warum der Fehlerbericht mehr als eine bloße Fehlersumme ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Erwartung:&amp;#039;&amp;#039;&amp;#039; 3 gültige, 2 ungültige Zeilen; der Mittelwert der gültigen Zahlen beträgt ungefähr 12.467 mm. Vergleiche im Testprotokoll &amp;#039;&amp;#039;&amp;#039;Eingabe, Soll, Ist und Begründung&amp;#039;&amp;#039;&amp;#039;. Führe das Programm nur auf den abgedruckten, künstlichen Lehrdaten aus.&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Auswerten, exportieren und übertragen =&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Sichere Auswertung ==&lt;br /&gt;
Kennzahlen helfen nur bei korrekter Datenbasis. Der Mittelwert ist Summe geteilt durch Anzahl gültiger Werte. Bei keiner gültigen Zahl speichert das Beispiel den JSON-Nullwert, nicht eine erfundene Nullmessung. Erweitere das Programm später um Minimum, Maximum und eine dokumentierte Rundungsregel. Ein Plausibilitätsbereich ist nur sinnvoll, wenn er vorab fachlich begründet und im Datenvertrag festgelegt wurde.&lt;br /&gt;
&lt;br /&gt;
Wenn eine Tabellenkalkulation benötigt wird, kannst du zusätzlich eine CSV mit gültigen Werten exportieren:&lt;br /&gt;
 with open(&amp;quot;gueltige_werte.csv&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;, newline=&amp;quot;&amp;quot;) as datei:&lt;br /&gt;
     writer = csv.DictWriter(datei,&lt;br /&gt;
                             fieldnames=[&amp;quot;id&amp;quot;, &amp;quot;wert&amp;quot;, &amp;quot;einheit&amp;quot;],&lt;br /&gt;
                             delimiter=&amp;quot;;&amp;quot;)&lt;br /&gt;
     writer.writeheader()&lt;br /&gt;
     for eintrag in gueltig:&lt;br /&gt;
         writer.writerow({k: eintrag[k] for k in&lt;br /&gt;
                          [&amp;quot;id&amp;quot;, &amp;quot;wert&amp;quot;, &amp;quot;einheit&amp;quot;]})&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Achtung:&amp;#039;&amp;#039;&amp;#039; Dieser kurze CSV-Export lässt die Herkunftsspalten weg. Er darf deshalb nicht allein den prüffähigen vollständigen JSON-Export ersetzen. Erweitere die Felder im Transfer um datei, zeile und quelle. Vermeide stilles Überschreiben wichtiger Ausgaben.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=sATGr9ffB28|500|center}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Video (deutsch):&amp;#039;&amp;#039;&amp;#039; Ingo Janssen, „So kannst du mit Python einfach JSON lesen und schreiben“ (10.09.2020). &amp;#039;&amp;#039;&amp;#039;Offline-Alternative:&amp;#039;&amp;#039;&amp;#039; Öffne die beiden durch das Programm erzeugten JSON-Dateien im Texteditor und vergleiche ihre Schlüssel und Strukturen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Fehler erklären statt unsichtbar korrigieren ==&lt;br /&gt;
Die Zukunftsaufgabe heißt &amp;#039;&amp;#039;&amp;#039;Datenvertrag statt stiller Fehlerkorrektur&amp;#039;&amp;#039;&amp;#039;. Möchtest du künftig Zentimeter akzeptieren, ändere zuerst Vertragsversion und Tests. Danach entscheidest du transparent zwischen bewusster Umrechnung mit Originalwert und Ursprungs-Einheit, getrennter Verarbeitung oder Zurückweisung. Erkläre, warum ein stilles „12,4 wird schon passen“ nicht tragfähig ist.&lt;br /&gt;
&lt;br /&gt;
Als allgemeiner Denkanstoß nennt NIST AI 600-1 (Juli 2024) für generative KI unter anderem Herkunft und Tests; dies ist keine unmittelbare CSV-Importvorschrift. Die MCP-Sicherheitsleitlinien der Fassung 2026-07-28 behandeln Schutzmaßnahmen verbundener Systeme; unsere lokale App verwendet jedoch kein MCP und keine externe KI. Übernimm deshalb nur die übertragbaren Grundgedanken: begrenzte Rechte, klar definierte Eingaben und nachprüfbare Ergebnisse. Es handelt sich &amp;#039;&amp;#039;&amp;#039;nicht&amp;#039;&amp;#039;&amp;#039; um eine offizielle Liebherr- oder IHK-Zertifizierung.&lt;br /&gt;
&lt;br /&gt;
[[File:Flowgorithm Input Process Output.svg|380px|frameless|center|alt=Englisches Flussdiagramm mit Eingabe, Verarbeitung und Ausgabe|Allgemeiner Ablauf von Eingabe zu Verarbeitung und Ausgabe]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Alternative zum Bild:&amp;#039;&amp;#039;&amp;#039; Zeichne selbst: Datei → Spaltenprüfung → Zeilenprüfung → gültige Daten und Fehler trennen → Statistik und Bericht. Das Bild ist ein allgemeines Ablaufbeispiel, kein fertiger technischer Sicherheitsplan.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Anspruchsvolle Vertiefung ==&lt;br /&gt;
Entwirf eine Funktion validate_row, die die Regeln aus Lehrvertrag 1.0 testet. Ergänze im Fehlerbericht zusätzliche Ereignisse für fehlende Quellen, unerwartete Spalten und nicht endliche Werte. Teste jeden Sonderfall mit einer synthetischen Zeile. Vergleiche danach, was der Importer tut, was er ausdrücklich nicht tut und warum. Dokumentiere die Quelle und Versionsnummer deines Regelwerks neben jedem Export.&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Interaktive Aufgaben =&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Multiple-Choice-Quiz ==&lt;br /&gt;
Beantworte zehn Fragen. Die eingebauten Quizfelder geben Rückmeldung nach der Bearbeitung; es gibt keine im Voraus ausgeschriebene Lösungsliste.&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Kopfzeile ist für den Importer vorgeschrieben?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(messwert_id;wert;einheit;quelle)&lt;br /&gt;
(!nummer;zeit;signal;ausgang)&lt;br /&gt;
(!id;name;temperatur;freigabe)&lt;br /&gt;
(!wert;benutzer;passwort;token)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welches Modul liest CSV-Zeilen als Wörterbuch?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(csv.DictReader)&lt;br /&gt;
(!json.dump)&lt;br /&gt;
(!math.isfinite)&lt;br /&gt;
(!openpyxl)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was geschieht bei leerer Einheit?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Datensatz beanstanden und einheit_fehlt dokumentieren)&lt;br /&gt;
(!Millimeter still ergänzen)&lt;br /&gt;
(!Wert ungeprüft übernehmen)&lt;br /&gt;
(!Fehler ohne Bericht löschen)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wie wird nicht_messbar behandelt?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Als ungültige Zahl mit eigenem Fehlergrund)&lt;br /&gt;
(!Als gemessene Null)&lt;br /&gt;
(!Als neue Einheit)&lt;br /&gt;
(!Als gültige Dezimalzahl)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Welche Angaben erhalten die Herkunft?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Quelldatei, physische Zeile und Quellenkennung)&lt;br /&gt;
(!Nur der Mittelwert)&lt;br /&gt;
(!Nur der Dateityp)&lt;br /&gt;
(!Nur der Python-Versionsname)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was bedeutet der Parameter delimiter in diesem Import?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Er definiert das Semikolon als Spaltentrenner)&lt;br /&gt;
(!Er schaltet die Fehlerprüfung ab)&lt;br /&gt;
(!Er rundet Dezimalwerte)&lt;br /&gt;
(!Er bestimmt den Dateipfad)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was macht json.dump?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Es schreibt Python-Daten als JSON in eine Datei)&lt;br /&gt;
(!Es importiert Maschinenbefehle)&lt;br /&gt;
(!Es misst einen Prüfkörper)&lt;br /&gt;
(!Es prüft die Einheit automatisch)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wie wird ohne gültige Messwerte der Mittelwert behandelt?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Als nicht berechenbar und mit Nullwert ausgegeben)&lt;br /&gt;
(!Als sicher gemessener Wert Null)&lt;br /&gt;
(!Als Zahl unendlich)&lt;br /&gt;
(!Als bestätigte Freigabe)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wozu dient math.isfinite?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Es erkennt, ob eine Zahl endlich ist)&lt;br /&gt;
(!Es benennt eine JSON-Datei)&lt;br /&gt;
(!Es zählt die Spalten)&lt;br /&gt;
(!Es wählt eine Einheit)&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{MC}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Was kommt vor der Einführung der Einheit cm?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
(Eine dokumentierte Vertragsänderung mit Tests)&lt;br /&gt;
(!Stille Umrechnung jeder Eingabe)&lt;br /&gt;
(!Entfernen aller Herkunftsangaben)&lt;br /&gt;
(!Löschen der Fehlerliste)&lt;br /&gt;
{{E}}&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Memory ==&lt;br /&gt;
Verbinde jeden Begriff mit genau einer Definition.&lt;br /&gt;
&amp;lt;div class=&amp;quot;memo-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Datensatz || Zusammengehörige Felder einer Tabellenzeile&lt;br /&gt;
|-&lt;br /&gt;
| Datenvertrag || Vereinbarung von Format und Fehlerregeln&lt;br /&gt;
|-&lt;br /&gt;
| Validierung || Prüfen einer Eingabe gegen festgelegte Regeln&lt;br /&gt;
|-&lt;br /&gt;
| Provenienz || Dokumentierte Herkunft einer Information&lt;br /&gt;
|-&lt;br /&gt;
| Export || Schreiben verarbeiteter Daten in eine Datei&lt;br /&gt;
|-&lt;br /&gt;
| Fehlercode || Eindeutige Kennung einer Regelverletzung&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Drag-and-Drop ==&lt;br /&gt;
Ordne jedem Fall die richtige Aktion zu.&lt;br /&gt;
&amp;lt;div class=&amp;quot;lueckentext-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Richtige Aktion !! Beobachteter Fall&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Einheitenfehler melden&amp;#039;&amp;#039;&amp;#039; || Leeres Einheitenfeld&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Zahlfehler getrennt erfassen&amp;#039;&amp;#039;&amp;#039; || Nicht lesbarer Zahlentext&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quelle erhalten&amp;#039;&amp;#039;&amp;#039; || Herkunft für einen Messwert erforderlich&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Kopfzeile beanstanden&amp;#039;&amp;#039;&amp;#039; || Pflichtspalte fehlt in der Datei&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Endlichkeit kontrollieren&amp;#039;&amp;#039;&amp;#039; || Wert lautet unendlich&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Kreuzworträtsel ==&lt;br /&gt;
Finde zu jedem Hinweis ein deutsches Einzelwort.&lt;br /&gt;
&amp;lt;div class=&amp;quot;kreuzwort-quiz&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| Trennzeichen || Trennt Felder einer CSV-Zeile&lt;br /&gt;
|-&lt;br /&gt;
| Herkunft || Ursprung einer Messwertaufzeichnung&lt;br /&gt;
|-&lt;br /&gt;
| Validierung || Prüfung anhand vorher festgelegter Regeln&lt;br /&gt;
|-&lt;br /&gt;
| Datenvertrag || Vereinbarung für Felder und Fehlerverhalten&lt;br /&gt;
|-&lt;br /&gt;
| Messreihe || Sammlung von Messwerten eines Versuchs&lt;br /&gt;
|-&lt;br /&gt;
| Fehlerbericht || Liste mit beanstandeten Zeilen und Gründen&lt;br /&gt;
|}&lt;br /&gt;
{{E}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== LearningApps ==&lt;br /&gt;
Nutze eine freiwillige externe Sammlung verwandter Übungsangebote; der gesamte Pflichtkurs ist unabhängig davon bearbeitbar.&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://learningapps.org/index.php?s=CSV+JSON+und+technische+Daten+mit+Python+verarbeiten &amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
== Lückentext ==&lt;br /&gt;
Ergänze die Fachbegriffe. Jeder Satz enthält höchstens eine Lücke.&lt;br /&gt;
&amp;lt;quiz display=simple&amp;gt;&lt;br /&gt;
{&amp;#039;&amp;#039;&amp;#039;Ergänze den Fachbegriff.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
|type=&amp;quot;{}&amp;quot;}&lt;br /&gt;
Das tabellarische Textformat heißt { CSV }. Eine Liste strukturierter Objekte kann als { JSON } gespeichert werden. Vor dem Import gilt ein { Datenvertrag }. Ein leerer Einheitenwert erzeugt { einheit_fehlt }. Nicht lesbare Zahlen erzeugen { zahl_ungueltig }. Quelldatei und Zeile beschreiben die { Herkunft }. Für endliche Zahlen nutzt das Programm { isfinite }. Aus gültigen Zahlen errechnet man den { Mittelwert }.&lt;br /&gt;
&amp;lt;/quiz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Offene Aufgaben =&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Leicht ===&lt;br /&gt;
# [[Dateiformate]]: Schreibe zwei Unterschiede zwischen CSV und JSON und ein selbst erstelltes Beispiel auf.&lt;br /&gt;
# [[Maßeinheit]]: Markiere bei A02 das leere Einheitenfeld und begründe die Beanstandung.&lt;br /&gt;
# [[Python]]: Starte den ersten DictReader-Test offline und erkläre die Ausgabe von A01.&lt;br /&gt;
# [[Datenherkunft]]: Zeichne für A04 den Weg von der Quelldatei bis zum Export.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Standard ===&lt;br /&gt;
# [[Datenprüfung]]: Ergänze eine synthetische Zeile ohne Quelle und protokolliere den Fehler.&lt;br /&gt;
# [[Fehleranalyse]]: Vergleiche getrennt fehlende Einheit und nicht lesbare Zahl anhand der Fehlercodes.&lt;br /&gt;
# [[CSV-Export]]: Erweitere die gültige CSV-Ausgabe um vollständige Herkunftsdaten.&lt;br /&gt;
# [[Statistik]]: Berechne Mittelwert, Minimum und Maximum ausschließlich aus gültigen Zahlen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
=== Schwer ===&lt;br /&gt;
# [[Datenvertrag]]: Entwerfe einen Vertrag 1.1 mit transparentem Umgang mit cm und passenden Tests.&lt;br /&gt;
# [[Softwaretest]]: Prüfe fehlende Quelle, überzählige Spalten und nicht endliche Zahlen mit künstlichen Datensätzen.&lt;br /&gt;
# [[Datenqualität]]: Begründe, wann verwerfen statt korrigieren richtig ist und wie du Änderungen dokumentierst.&lt;br /&gt;
# [[Programmstruktur]]: Entwerfe getrennte Funktionen für Validierung, Import, Statistik und Ausgabe.&lt;br /&gt;
{{:Offene Aufgabe - MOOC erstellen}}&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernkontrolle =&lt;br /&gt;
# [[Akzeptanztest]]: Zeige im Fehlerbericht zu A02 die Fehlermeldung für die fehlende Einheit und begründe die Trennung.&lt;br /&gt;
# [[Datentypen]]: Begründe anhand von A03, warum ein ungültiger Text keine Nullmessung sein darf.&lt;br /&gt;
# [[Datenherkunft]]: Weise für A05 Datei, Zeilennummer und Quelle im Export nach.&lt;br /&gt;
# [[Tabellendaten]]: Vergleiche CSV und JSON für gültige Messwerte und komplexe Fehlerberichte.&lt;br /&gt;
# [[Mittelwert]]: Berechne den Mittelwert aus A01, A04 und A05; erkläre die zwei Ausschlüsse.&lt;br /&gt;
# [[Qualitätssicherung]]: Formuliere eine neue cm-Regel und zwei Akzeptanztests, bevor du Code änderst.&lt;br /&gt;
# [[Transfer]]: Begründe, wie eine Datei mit falscher Kopfzeile erkannt wird und was dann geschehen soll.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Lernnachweis =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Abgabe:&amp;#039;&amp;#039;&amp;#039; Messreihen-Importer mit messwerte.csv, importer.py, ergebnis.json, fehlerbericht.json sowie einer kurzen Anleitung und einem Testprotokoll. Das Programm soll nur auf synthetischen lokalen Lehrdaten laufen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pflichttests:&amp;#039;&amp;#039;&amp;#039; (1) A02: fehlende Einheit melden; (2) A03: ungültige Zahl getrennt berichten; (3) A01, A04 und A05: Herkunft vollständig erhalten. Zeige zu jedem Test Eingabe, Soll, Ist und einen Screenshot oder den abgetippten relevanten JSON-Auszug. Erkläre einen eigenen zusätzlichen Fehlerfall sowie deine Entscheidung anhand des Datenvertrags. Der Mittelwert darf nur gültige Zahlen enthalten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beurteilung:&amp;#039;&amp;#039;&amp;#039; Fachlich nachvollziehbare Validierungsregeln, vollständig getrennte Fehlerliste, nachvollziehbare Quellen, korrekte Auswertung, reproduzierbare Tests und selbstständig begründeter Transfer. Wer vertiefen möchte, ergänzt Versionierung und Grenzwerte; reale Steuerungs- und Sicherheitsfunktionen bleiben ausgeschlossen.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= OER und Wikipedia =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Recherche- und Versionsstand: 22.10.2026.&amp;#039;&amp;#039;&amp;#039; [https://docs.python.org/3.14/library/csv.html Python 3.14: csv], [https://docs.python.org/3.14/library/json.html Python 3.14: json] und [https://docs.python.org/3.14/library/math.html Python 3.14: math] dokumentieren die verwendeten Standardfunktionen. [https://www.rfc-editor.org/rfc/rfc4180 RFC 4180] ist ein wichtiger CSV-Ausgangspunkt; Varianten mit Semikolon sind ausdrücklich zu vereinbaren.&lt;br /&gt;
&lt;br /&gt;
[https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf NIST AI 600-1 (Juli 2024)] behandelt Risiken generativer KI, nicht speziell CSV-Import. [https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices MCP Security Best Practices (2026-07-28)] behandelt Sicherheitsfragen vernetzter Dienste, nicht den Betrieb dieses Offline-Beispiels. Beide sind ausdrücklich übertragene Denkanstöße, keine offizielle Normfreigabe für den Importer. Fachliche Aktualität und Anwendbarkeit im konkreten Betrieb gesondert überprüfen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Deutsche Wikipedia zum Nachlesen:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;iframe&amp;gt; https://de.m.wikipedia.org/wiki/Comma-separated_values &amp;lt;/iframe&amp;gt;&lt;br /&gt;
[https://de.wikipedia.org/wiki/JavaScript_Object_Notation Ergänzender JSON-Artikel]. Alle Kerninformationen stehen bereits hier und können offline genutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wikimedia Commons – überprüfte Originaldateiseiten, Urheber und Lizenzangaben:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Datei !! Originaldateiseite !! Urheberangabe !! Lizenz laut Dateiseite&lt;br /&gt;
|-&lt;br /&gt;
| File:CsvDelimited001.svg || [https://commons.wikimedia.org/wiki/File:CsvDelimited001.svg Commons] || Dreftymac; spätere Bearbeitungen in Versionshistorie || [https://creativecommons.org/licenses/by-sa/2.5/ CC BY-SA 2.5]&lt;br /&gt;
|-&lt;br /&gt;
| File:Example CSV file.png || [https://commons.wikimedia.org/wiki/File:Example_CSV_file.png Commons] || Belbury || [https://creativecommons.org/licenses/by-sa/4.0/ CC BY-SA 4.0]&lt;br /&gt;
|-&lt;br /&gt;
| File:Example json code.png || [https://commons.wikimedia.org/wiki/File:Example_json_code.png Commons] || Diego Mariano, Ausschnitt durch weiteren Uploader || [https://creativecommons.org/licenses/by/4.0/ CC BY 4.0 laut Dateiseite]&lt;br /&gt;
|-&lt;br /&gt;
| File:Flowgorithm Input Process Output.svg || [https://commons.wikimedia.org/wiki/File:Flowgorithm_Input_Process_Output.svg Commons] || Dave Braunschweig || [https://commons.wikimedia.org/wiki/File:Flowgorithm_Input_Process_Output.svg Lizenzangabe und Bedingungen der Dateiseite]&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rechte und Alternativen:&amp;#039;&amp;#039;&amp;#039; Dateinamen und verknüpfte Commons-Seiten wurden recherchiert; die Bilder sind nicht selbst produziert. Zu jedem Bild stehen Alternativtext und lesbare inhaltliche Alternative im jeweiligen Kapitel. Bei Weiternutzung stets die zum Zeitpunkt der Nutzung gültige Dateiversion und Lizenzbedingungen prüfen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;YouTube-Videos, überprüfbare Einträge:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [https://www.youtube.com/watch?v=lDk2uuRTusY Ingo Janssen, CSV Dateien einfach lesen und schreiben?, 24.09.2020].&lt;br /&gt;
* [https://www.youtube.com/watch?v=sATGr9ffB28 Ingo Janssen, So kannst du mit Python einfach JSON lesen und schreiben, 10.09.2020].&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rechte:&amp;#039;&amp;#039;&amp;#039; Urheber und Anbieter des Videos sind keine pauschale freie Lizenz. Eine spätere Abspielbarkeit ist nicht zugesichert. Anleitungen und Beispielcode im Kurs ersetzen beide Videos. Eine thematisch geeignete, verlässlich lizenz- und dateigeprüfte zusätzliche Commons-Audiodatei oder Animation konnte nicht bestätigt werden; es werden keine Dateien erfunden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Eigenständigkeit:&amp;#039;&amp;#039;&amp;#039; Unabhängiges Bildungsangebot, nicht durch Liebherr oder eine Industrie- und Handelskammer zertifiziert. Keine Maschinensteuerung, keine Sicherheitsfreigabe, keine realen persönlichen oder vertraulichen Betriebsdaten.&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= Verknüpfte Lernbereiche =&lt;br /&gt;
{| align=center&lt;br /&gt;
{{:D-Tab}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Python und Datenverarbeitung]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# [[CSV]]: Tabellen aus Text lesen&lt;br /&gt;
# [[JSON]]: Strukturierte Ergebnisse schreiben&lt;br /&gt;
# [[Datenqualität]]: Messwerte überprüfen&lt;br /&gt;
# [[Datenvertrag]]: Schnittstellenregeln festlegen&lt;br /&gt;
# [[Softwaretest]]: Fehler und Akzeptanzkriterien&lt;br /&gt;
# [[Berufsausbildung]]: Technische Dokumentation&lt;br /&gt;
|}&lt;br /&gt;
Weiterführend: [[Programmieren]], [[Technische Informatik]], [[Messtechnik]], [[Statistik]], [[Informationssicherheit]] und [[Qualitätsmanagement]].&lt;br /&gt;
[[Category:Sprache:Deutsch]]&lt;br /&gt;
[[Category:Locale:de-DE]]&lt;br /&gt;
[[Category:Python]]&lt;br /&gt;
[[Category:Programmierung]]&lt;br /&gt;
[[Category:Technische Informatik]]&lt;br /&gt;
[[Category:Berufsausbildung]]&lt;br /&gt;
[[Category:Datenverarbeitung]]&lt;br /&gt;
&lt;br /&gt;
{{BR}}&lt;br /&gt;
= aiMOOC Projekte =&lt;br /&gt;
[[Category:AI_MOOC]] [[Category:GPT aiMOOC]]&lt;br /&gt;
{{MT}}&lt;/div&gt;</summary>
		<author><name>Glanz</name></author>
	</entry>
</feed>