Pandas & NumPy Academy · Lektion

Aus URLs und StringIO lesen

Laden Sie entfernte CSV-Dateien direkt von einer URL und analysieren Sie CSV-Zeichenketten im Speicher mit io.StringIO zu Testzwecken.

Lektion 4 von 413 Schritte

Aus URLs und StringIO lesen ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Daten lesen, ohne Dateien herunterzuladen

Sie müssen eine Datei nicht immer auf der Festplatte speichern, bevor Sie sie in Pandas laden. pd.read_csv(url) akzeptiert direkt eine HTTP- oder HTTPS-URL und lädt die Datei in einem Schritt in einen DataFrame. Das ist ideal für öffentliche Datensätze auf GitHub, data.gov oder beliebigen Webservern und macht Notebooks reproduzierbar — jeder kann sie ausführen, ohne Dateien vorher herunterzuladen.

import pandas as pd

url = 'https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv'
df = pd.read_csv(url)
print(df.shape)   # (244, 7)
print(df.head(2))

Funktionsweise des URL-Lesens im Hintergrund

Wenn Sie eine URL an read_csv() übergeben, verwendet Pandas intern Pythons urllib oder die Bibliothek requests, um die Rohdaten herunterzuladen, und parst sie anschließend genau so, als stammten sie aus einer lokalen Datei. Die meisten Lesefunktionen (read_excel, read_json, read_parquet) unterstützen URLs. Dateien mit der Komprimierung .gz oder .bz2 werden automatisch dekomprimiert.

import pandas as pd

# Compressed CSV from URL -- auto-decompressed
url = 'https://example.com/data.csv.gz'
df = pd.read_csv(url, compression='infer')
print(df.shape)

Anforderungsheader für die Authentifizierung hinzufügen

Einige APIs erfordern Authentifizierungsheader (Bearer-Token, API-Schlüssel). Das Lesen von URLs in Pandas unterstützt benutzerdefinierte Header nicht direkt. Verwenden Sie in solchen Fällen requests, um den Inhalt zunächst herunterzuladen, und verpacken Sie ihn anschließend in io.StringIO, bevor Sie ihn an Pandas übergeben. Dieses zweistufige Muster trennt HTTP-Aufgaben vom Parsen der Daten.

import pandas as pd
import requests
import io

headers = {'Authorization': 'Bearer mytoken123'}
response = requests.get('https://api.example.com/export.csv',
                        headers=headers)
df = pd.read_csv(io.StringIO(response.text))
print(df.shape)

Was ist io.StringIO?

io.StringIO ist eine Klasse aus der Python-Standardbibliothek, die aus einer Zeichenfolge ein Dateiobjekt im Speicher erstellt. Da die Lesefunktionen von Pandas entweder einen Dateipfad oder ein dateiähnliches Objekt erwarten, können Sie jede CSV-Zeichenfolge in StringIO verpacken und direkt übergeben. Das ist besonders nützlich für Tests, die Verarbeitung von API-Antworten und das Parsen von CSV-Daten, die dynamisch von Python-Code erzeugt wurden.

import pandas as pd
import io

csv_text = 'name,score\nAlice,90\nBob,75\nCarol,88'
df = pd.read_csv(io.StringIO(csv_text))
print(df)
#     name  score
# 0  Alice     90
# 1    Bob     75
# 2  Carol     88

io.BytesIO für Binärdaten

Verwenden Sie für Binärformate wie Excel, Parquet oder komprimierte CSV-Dateien io.BytesIO (einen bytes-basierten Puffer im Speicher) anstelle von io.StringIO. Verpacken Sie die Rohdaten aus einer Netzwerkantwort oder einem BLOB-Feld einer Datenbank in BytesIO und übergeben Sie sie an die passende Lesefunktion. So vermeiden Sie das Schreiben temporärer Dateien auf die Festplatte.

import pandas as pd
import requests
import io

# Download an Excel file without saving to disk
response = requests.get('https://example.com/report.xlsx')
buffer = io.BytesIO(response.content)
df = pd.read_excel(buffer, sheet_name='Data')
print(df.shape)

Testen mit StringIO

Eine wichtige Verwendung von StringIO sind Unit-Tests: Betten Sie kleine CSV-Zeichenfolgen direkt in die Testfunktion ein, statt Fixture-Dateien bereitzustellen. Dadurch werden Tests eigenständig, portabel und schnell. Die Testdaten werden zusammen mit dem Code versioniert und können nicht von einer externen Datei abweichen.

import pandas as pd
import io

def test_clean_names():
    raw = 'name,age\n Alice ,30\nBob ,25'
    df = pd.read_csv(io.StringIO(raw))
    df['name'] = df['name'].str.strip()
    assert df['name'].tolist() == ['Alice', 'Bob']
    print('Test passed')

test_clean_names()

In StringIO für CSV-Daten im Speicher schreiben

Sie können einen DataFrame mit df.to_csv(buffer) in einen StringIO-Puffer schreiben und so eine CSV-Zeichenfolge im Speicher erzeugen, ohne eine Datei anzulegen. Rufen Sie buffer.getvalue() auf, um die Zeichenfolge abzurufen. Das ist nützlich, um CSV in den Text einer E-Mail einzubetten, in einer HTTP-Antwort zu senden oder in Tests erwartete und tatsächliche CSV-Ausgaben zu vergleichen.

import pandas as pd
import io

df = pd.DataFrame({'x': [1, 2], 'y': [3, 4]})
buffer = io.StringIO()
df.to_csv(buffer, index=False)
csv_string = buffer.getvalue()
print(repr(csv_string))
# 'x,y\n1,3\n2,4\n'

Entfernte Daten mit Requests-Cache zwischenspeichern

Das wiederholte Herunterladen derselben URL während der Entwicklung ist langsam und verbraucht unnötig Bandbreite. Verwenden Sie requests-cache oder speichern Sie den ersten Download in einer lokalen Datei. Ein häufig verwendetes Muster besteht darin, zu prüfen, ob eine lokale Cache-Datei vorhanden ist, und nur dann auf die URL zurückzugreifen, wenn sie fehlt. So wird die Entwicklung beschleunigt, während die Notebooks weiterhin von Grund auf ausgeführt werden können.

import pandas as pd
import os

LOCAL = 'data/tips_cache.csv'
URL = 'https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv'

if os.path.exists(LOCAL):
    df = pd.read_csv(LOCAL)
else:
    df = pd.read_csv(URL)
    df.to_csv(LOCAL, index=False)
print('Loaded:', df.shape)

Große entfernte Dateien streamen

Bei großen entfernten CSV-Dateien, die den verfügbaren Speicher überschreiten, können Sie das Streaming von requests mit chunksize kombinieren. Streamen Sie den Inhalt der Antwort zeilenweise in einen StringIO-Puffer, lesen Sie ihn in Blöcken und verarbeiten Sie diese schrittweise. Alternativ können Sie die Datei mit requests direkt in Blöcken in eine lokale Datei herunterladen und anschließend das blockweise Lesen von Pandas für die lokale Kopie verwenden.

import requests
import io
import pandas as pd

def stream_csv(url, chunksize=10000):
    with requests.get(url, stream=True) as r:
        content = r.content.decode('utf-8')
    for chunk in pd.read_csv(io.StringIO(content), chunksize=chunksize):
        yield chunk

Mehrere URLs parallel lesen

Wenn Sie Datensätze aus mehreren URLs zusammenführen müssen, ist das sequenzielle Lesen langsam. Verwenden Sie Pythons concurrent.futures.ThreadPoolExecutor, um mehrere URLs gleichzeitig herunterzuladen und zu parsen, und führen Sie die Ergebnisse anschließend mit pd.concat() zusammen. Für CPU-intensive Parsing-Aufgaben mit vielen großen Dateien kann ProcessPoolExecutor schneller sein.

import pandas as pd
from concurrent.futures import ThreadPoolExecutor

urls = [
    'https://example.com/data_jan.csv',
    'https://example.com/data_feb.csv',
]

with ThreadPoolExecutor(max_workers=4) as ex:
    dfs = list(ex.map(pd.read_csv, urls))
combined = pd.concat(dfs, ignore_index=True)
print(combined.shape)

Sicherheitsaspekte bei entfernten URLs

Das Lesen von nicht vertrauenswürdigen URLs birgt Risiken: Ein böswilliger Server könnte auf ein unerwartetes Format umleiten, eine extrem große Datei bereitstellen und dadurch den Speicher erschöpfen oder Inhalte einschleusen, die den Parser verwirren. Überprüfen Sie stets das URL-Schema (für vertrauliche Daten muss es HTTPS sein), legen Sie für den Download ein Timeout fest und begrenzen Sie beim ersten Erkunden einer unbekannten URL die Anzahl der Zeilen mit nrows=.

import pandas as pd
import requests
import io

url = 'https://trusted-source.example.com/data.csv'
response = requests.get(url, timeout=30)  # 30-second timeout
response.raise_for_status()              # raise on HTTP error
df = pd.read_csv(io.StringIO(response.text), nrows=1000)
print(df.shape)

Kurzer Test

Testen Sie Ihr Verständnis zum Lesen von URLs und StringIO aus dieser Lektion.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: pd.read_csv() akzeptiert HTTP/HTTPS-URLs direkt, ohne dass Dateien vorher heruntergeladen werden müssen, io.StringIO verpackt eine CSV-Zeichenfolge in ein dateiähnliches Objekt, sodass Pandas sie aus dem Speicher parsen kann und io.BytesIO erfüllt dieselbe Funktion für Binärformate wie Excel und Parquet. Damit ist der Kurs zum Lesen und Schreiben von Daten abgeschlossen — als Nächstes filtern wir DataFrames präzise mit boolescher Indizierung und der Methode query().

Kostenlos starten

Lerne Python mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
30
Lektionen
120

Häufig gestellte Fragen

Ist die Lektion „Aus URLs und StringIO lesen“ kostenlos?

Ja — der vollständige Text von „Aus URLs und StringIO lesen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Aus URLs und StringIO lesen“?

Laden Sie entfernte CSV-Dateien direkt von einer URL und analysieren Sie CSV-Zeichenketten im Speicher mit io.StringIO zu Testzwecken. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?

Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Aus URLs und StringIO lesen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?

Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. CSV-Dateien einlesen
  2. Excel- und JSON-Dateien einlesen
  3. DataFrames in Dateien schreiben
  4. Aus URLs und StringIO lesen
← Zurück zu Pandas & NumPy Academy