Pandas & NumPy Academy · पाठ

URL और StringIO से पढ़ना

किसी URL से दूरस्थ CSV फ़ाइलें सीधे लोड कीजिए और परीक्षण के लिए io.StringIO का उपयोग करके मेमोरी में मौजूद CSV स्ट्रिंग पार्स कीजिए।

पाठ 4, कुल 4 में से13 चरण

URL और StringIO से पढ़ना, CoddyKit पर Pandas & NumPy Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Pandas & NumPy Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

फाइलें डाउनलोड किए बिना डेटा पढ़ना

डेटा को Pandas में लोड करने से पहले आपको हमेशा फाइल को डिस्क पर सहेजना आवश्यक नहीं है। pd.read_csv(url) सीधे HTTP या HTTPS URL स्वीकार करता है और एक ही चरण में फाइल को डाउनलोड करके DataFrame में लोड कर देता है। यह GitHub, data.gov या किसी वेब सर्वर पर रखे सार्वजनिक डेटासेट के लिए आदर्श है और नोटबुक को पुनरुत्पाद्य बनाता है — कोई भी व्यक्ति परिसंपत्तियों को पहले डाउनलोड किए बिना उन्हें चला सकता है।

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

URL से पढ़ना आंतरिक रूप से कैसे काम करता है

जब आप read_csv() को कोई URL देते हैं, तो Pandas आंतरिक रूप से Python की urllib या requests लाइब्रेरी का उपयोग करके कच्चे बाइट डाउनलोड करता है, फिर उन्हें ठीक उसी तरह पार्स करता है जैसे वे स्थानीय फाइल से आए हों। अधिकांश पठन फ़ंक्शन (read_excel, read_json, read_parquet) URL का समर्थन करते हैं। .gz या .bz2 के रूप में संपीड़ित फाइलें अपने-आप डीकंप्रेस हो जाती हैं।

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)

प्रमाणीकरण के लिए अनुरोध हेडर जोड़ना

कुछ API को प्रमाणीकरण हेडर (Bearer टोकन, API कुंजी) आवश्यक होते हैं। Pandas का URL पठन सीधे कस्टम हेडर का समर्थन नहीं करता। ऐसे मामलों में सामग्री को पहले डाउनलोड करने के लिए requests का उपयोग करें, फिर Pandas को देने से पहले उसे io.StringIO में रैप करें। यह दो-चरणीय तरीका HTTP संबंधी चिंताओं को डेटा पार्सिंग से अलग रखता है।

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)

io.StringIO क्या है

io.StringIO Python की मानक-लाइब्रेरी का एक मेमोरी में फाइल-जैसी वस्तु बनाने वाला वर्ग है, जो किसी स्ट्रिंग से ऐसी वस्तु बनाता है। चूँकि Pandas के पठन फ़ंक्शन फाइल पथ या फाइल-जैसी वस्तु में से किसी एक की अपेक्षा करते हैं, इसलिए आप किसी भी CSV स्ट्रिंग को StringIO में रैप करके सीधे दे सकते हैं। यह परीक्षणों, API प्रतिक्रियाओं को संसाधित करने और Python कोड द्वारा गतिशील रूप से बनाए गए CSV डेटा को पार्स करने के लिए अत्यंत उपयोगी है।

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

Excel, Parquet या संपीड़ित CSV जैसे बाइनरी प्रारूपों के लिए io.StringIO के बजाय io.BytesIO (बाइट-आधारित मेमोरी बफ़र) का उपयोग करें। नेटवर्क प्रतिक्रिया या डेटाबेस BLOB फ़ील्ड से प्राप्त कच्चे बाइट को BytesIO में रैप करके उपयुक्त रीडर को दें। इससे अस्थायी फाइलों को डिस्क पर लिखने की आवश्यकता नहीं रहती।

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)

StringIO के साथ परीक्षण

StringIO का एक प्रमुख उपयोग इकाई परीक्षणों में है: फिक्स्चर फाइलें देने के बजाय छोटी CSV स्ट्रिंग को सीधे परीक्षण फ़ंक्शन में शामिल करें। इससे परीक्षण स्व-निहित, पोर्टेबल और तेज़ बनते हैं। परीक्षण डेटा का संस्करण-नियंत्रण कोड के साथ होता है और वह किसी बाहरी फाइल के साथ असंगत नहीं हो सकता।

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

मेमोरी में CSV के लिए StringIO में लिखना

फाइल बनाए बिना मेमोरी में CSV स्ट्रिंग तैयार करने के लिए आप df.to_csv(buffer) की सहायता से DataFrame को StringIO बफ़र में लिख सकते हैं। स्ट्रिंग प्राप्त करने के लिए buffer.getvalue() कॉल करें। यह CSV को ईमेल के मुख्य भाग में शामिल करने, HTTP प्रतिक्रिया में भेजने या परीक्षणों में अपेक्षित और वास्तविक CSV आउटपुट की तुलना करने के लिए उपयोगी है।

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'

Requests-Cache से दूरस्थ डेटा को कैश करना

विकास के दौरान एक ही URL को बार-बार डाउनलोड करना धीमा होता है और बैंडविड्थ व्यर्थ करता है। requests-cache का उपयोग करें या पहली डाउनलोड की गई सामग्री को स्थानीय फाइल में सहेजें। एक सामान्य तरीका यह है कि जाँचें कि स्थानीय कैश फाइल मौजूद है या नहीं और केवल उसके अनुपस्थित होने पर URL का वैकल्पिक उपयोग करें। इससे विकास तेज़ रहता है और नोटबुक को शुरू से चलाना भी संभव होता है।

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)

बड़ी दूरस्थ फाइलों को स्ट्रीम करना

मेमोरी से बड़ी दूरस्थ CSV फाइलों के लिए requests स्ट्रीमिंग को chunksize के साथ मिलाएँ। प्रतिक्रिया की सामग्री को पंक्ति-दर-पंक्ति StringIO बफ़र में स्ट्रीम करें, खंड पढ़ें और उन्हें क्रमिक रूप से संसाधित करें। वैकल्पिक रूप से, requests की सहायता से सामग्री को खंडों में सीधे स्थानीय फाइल में डाउनलोड करें, फिर स्थानीय प्रति पर Pandas का खंड-आधारित पठन उपयोग करें।

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

कई URL को समानांतर रूप से पढ़ना

जब आपको कई URL से डेटासेट मिलाकर एक करना हो, तो उन्हें क्रमिक रूप से पढ़ना धीमा होता है। कई URL को एक साथ डाउनलोड और पार्स करने के लिए Python के concurrent.futures.ThreadPoolExecutor का उपयोग करें, फिर परिणामों पर pd.concat() लागू करें। कई बड़ी फाइलों को CPU-निर्भर रूप से पार्स करने के लिए ProcessPoolExecutor अधिक तेज़ हो सकता है।

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)

दूरस्थ URL के लिए सुरक्षा संबंधी विचार

अविश्वसनीय URL से पढ़ने में जोखिम होते हैं: कोई दुर्भावनापूर्ण सर्वर अनपेक्षित प्रारूप पर रीडायरेक्ट कर सकता है, अत्यंत बड़ी फाइल भेजकर मेमोरी समाप्त कर सकता है या ऐसी सामग्री डाल सकता है जो पार्सर को भ्रमित करे। URL योजना को हमेशा सत्यापित करें (संवेदनशील डेटा के लिए HTTPS होना आवश्यक है), डाउनलोड पर समय-सीमा निर्धारित करें और किसी अपरिचित URL को पहली बार देखते समय 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)

त्वरित जाँच

इस पाठ से URL और StringIO से पढ़ने की अपनी समझ जाँचें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: pd.read_csv() सीधे HTTP/HTTPS URL स्वीकार करता है और इसके लिए पहले फाइलें डाउनलोड करने की आवश्यकता नहीं होती, io.StringIO CSV स्ट्रिंग को फाइल-जैसी वस्तु में रैप करता है, जिससे Pandas उसे मेमोरी से पार्स कर सकता है, और io.BytesIO Excel तथा Parquet जैसे बाइनरी प्रारूपों के लिए यही काम करता है। इससे डेटा पढ़ने और लिखने का पाठ्यक्रम पूरा होता है — आगे हम बूलियन इंडेक्सिंग और query() विधि की सहायता से DataFrames को सटीकता से फ़िल्टर करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “URL और StringIO से पढ़ना” पाठ निःशुल्क है?

हाँ—“URL और StringIO से पढ़ना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Pandas & NumPy Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“URL और StringIO से पढ़ना” में मैं क्या सीखूँगा?

किसी URL से दूरस्थ CSV फ़ाइलें सीधे लोड कीजिए और परीक्षण के लिए io.StringIO का उपयोग करके मेमोरी में मौजूद CSV स्ट्रिंग पार्स कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Pandas & NumPy Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Pandas & NumPy Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Pandas & NumPy Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“URL और StringIO से पढ़ना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Pandas & NumPy Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Pandas & NumPy Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. CSV फ़ाइलें पढ़ना
  2. Excel और JSON फ़ाइलें पढ़ना
  3. DataFrames को फ़ाइलों में लिखना
  4. URL और StringIO से पढ़ना
← Pandas & NumPy Academy पर वापस जाएँ