0Pricing
Pandas & NumPy Academy · Pelajaran

Membaca dari URL dan StringIO

Muat file CSV jarak jauh langsung dari URL dan uraikan String CSV dalam memori menggunakan io.StringIO untuk pengujian

Membaca dari URL dan StringIO adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Membaca Data Tanpa Mengunduh File

Anda tidak selalu harus menyimpan file ke disk sebelum memuatnya ke Pandas. pd.read_csv(url) menerima URL HTTP atau HTTPS secara langsung dan mengunduh file ke dalam DataFrame dalam satu langkah. Ini ideal untuk dataset publik yang dihosting di GitHub, data.gov, atau server web mana pun, serta membuat notebook dapat direproduksi — siapa pun dapat menjalankannya tanpa mengunduh aset terlebih dahulu.

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))

Cara Kerja Pembacaan URL Secara Internal

Saat Anda meneruskan URL ke read_csv(), Pandas menggunakan pustaka Python urllib atau requests secara internal untuk mengunduh byte mentah, lalu mengurainya persis seperti jika byte tersebut berasal dari file lokal. Sebagian besar fungsi pembacaan (read_excel, read_json, read_parquet) mendukung URL. File yang dikompresi sebagai .gz atau .bz2 didekompresi secara otomatis.

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)

Menambahkan Header Permintaan untuk Autentikasi

Beberapa API memerlukan header autentikasi (token Bearer, kunci API). Pembacaan URL oleh Pandas tidak mendukung header khusus secara langsung. Dalam kasus tersebut, gunakan requests untuk mengunduh konten terlebih dahulu, lalu bungkus konten itu dalam io.StringIO sebelum meneruskannya ke Pandas. Pola dua langkah ini memisahkan urusan HTTP dari penguraian data.

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)

Apa Itu io.StringIO?

io.StringIO adalah class pustaka standar Python yang membuat objek mirip file di memori dari sebuah string. Karena fungsi pembacaan Pandas mengharapkan jalur file atau objek mirip file, Anda dapat membungkus string CSV apa pun dalam StringIO dan meneruskannya secara langsung. Ini sangat berguna untuk pengujian, memproses respons API, dan mengurai data CSV yang dibuat secara dinamis oleh kode Python.

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 untuk Data Biner

Untuk format biner seperti Excel, Parquet, atau CSV terkompresi, gunakan io.BytesIO (buffer dalam memori berbasis byte) sebagai pengganti io.StringIO. Bungkus byte mentah dari respons jaringan atau bidang BLOB database dalam BytesIO, lalu teruskan ke pembaca yang sesuai. Dengan cara ini, Anda tidak perlu menulis file sementara ke disk.

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)

Pengujian dengan StringIO

Salah satu penggunaan utama StringIO adalah dalam pengujian unit: sematkan string CSV kecil langsung di dalam fungsi pengujian, alih-alih menyediakan file perlengkapan pengujian. Hal ini membuat pengujian mandiri, portabel, dan cepat. Data pengujian dikendalikan versinya bersama kode dan tidak dapat menjadi tidak selaras dengan file eksternal.

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()

Menulis ke StringIO untuk CSV di Memori

Anda dapat menulis DataFrame ke buffer StringIO dengan df.to_csv(buffer) untuk menghasilkan string CSV di memori tanpa membuat file. Panggil buffer.getvalue() untuk mengambil string tersebut. Ini berguna untuk menyematkan CSV dalam isi surel, mengirimkannya dalam respons HTTP, atau membandingkan hasil CSV yang diharapkan dengan hasil sebenarnya dalam pengujian.

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'

Menyimpan Data Jarak Jauh dalam Cache dengan Requests-Cache

Mengunduh URL yang sama berulang kali selama pengembangan berjalan lambat dan memboroskan bandwidth. Gunakan requests-cache atau simpan unduhan pertama ke file lokal. Pola yang umum adalah memeriksa apakah file cache lokal exists dan hanya menggunakan URL sebagai fallback jika file tersebut tidak ada. Dengan demikian, pengembangan menjadi cepat, sementara notebook tetap dapat dijalankan dari awal.

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)

Mengalirkan File Jarak Jauh Berukuran Besar

Untuk file CSV jarak jauh berukuran besar yang melebihi kapasitas memori, gabungkan streaming requests dengan chunksize. Alirkan konten respons baris demi baris ke buffer StringIO, baca potongan data, lalu proses secara bertahap. Sebagai alternatif, unduh langsung dengan requests ke file lokal dalam beberapa potongan, lalu gunakan pembacaan bertahap Pandas pada salinan lokal tersebut.

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

Membaca Beberapa URL Secara Paralel

Saat Anda perlu menggabungkan dataset dari beberapa URL, membacanya secara berurutan akan lambat. Gunakan concurrent.futures.ThreadPoolExecutor Python untuk mengunduh dan mengurai beberapa URL secara bersamaan, lalu gunakan pd.concat() pada hasilnya. Untuk penguraian yang terikat CPU pada banyak file besar, ProcessPoolExecutor mungkin lebih cepat.

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)

Pertimbangan Keamanan untuk URL Jarak Jauh

Membaca dari URL yang tidak tepercaya memiliki risiko: server berbahaya dapat mengarahkan Anda ke format yang tidak terduga, menyajikan file yang sangat besar hingga menghabiskan memori, atau menyisipkan konten yang membingungkan pengurai. Selalu validasi skema URL (harus HTTPS untuk data sensitif), tetapkan batas waktu pada pengunduhan, dan batasi jumlah baris dengan nrows= saat pertama kali menjelajahi URL yang belum dikenal.

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)

Pemeriksaan Cepat

Uji pemahaman Anda tentang pembacaan dari URL dan StringIO dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari bahwa: pd.read_csv() menerima URL HTTP/HTTPS secara langsung tanpa perlu mengunduh file terlebih dahulu, io.StringIO membungkus string CSV menjadi objek mirip file sehingga Pandas dapat mengurainya dari memori, dan io.BytesIO melakukan hal yang sama untuk format biner seperti Excel dan Parquet. Dengan ini, kursus Membaca dan Menulis Data selesai — selanjutnya, kita akan memfilter DataFrames secara tepat menggunakan pengindeksan boolean dan metode query().

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membaca dari URL dan StringIO” gratis?

Ya — teks lengkap “Membaca dari URL dan StringIO” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membaca dari URL dan StringIO”?

Muat file CSV jarak jauh langsung dari URL dan uraikan String CSV dalam memori menggunakan io.StringIO untuk pengujian Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Membaca dari URL dan StringIO” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membaca File CSV
  2. Membaca File Excel dan JSON
  3. Menulis DataFrames ke File
  4. Membaca dari URL dan StringIO
← Kembali ke Pandas & NumPy Academy