CSV

CSV फ़ाइल क्या होती है?

सादा पाठ में लिखी एक तालिका। हर स्प्रेडशीट, हर डेटाबेस और हर विश्लेषण औज़ार इसे पढ़ लेता है। सावधानी: भारतीय अंक-समूहन 1,23,456 लिखता है, और वह अल्पविराम फ़ाइल के अपने अल्पविराम से टकराता है।

CSV है क्या

CSV एक सादा टेक्स्ट फ़ॉर्मेट है, जो किसी भी एडिटर में खुल जाता है। इसका इस्तेमाल प्रोग्रामों के बीच डेटा ले जाना के लिए होता है।

एक्सटेंशन .csv है और पूरा नाम Comma-Separated Values। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।

CSV आया कहाँ से

यह 1972 तक पीछे जाता है। विनिर्देश RFC 4180 है।

जो फ़ॉर्मेट इतने लंबे समय तक पढ़ा जाता रहा हो, उसे वह चीज़ सौंपी जा सकती है जो आपको दस साल बाद वापस चाहिए।

विनिर्देश सार्वजनिक है

यह पूरा प्रकाशित है, इसलिए कोई भी इसे देखकर अंदाज़ा लगाने के बजाय दस्तावेज़ पढ़कर लागू कर सकता है। यही वजह है कि यह फ़ॉर्मेट इतने सारे प्रोग्रामों में मिलता है, और यही वजह है कि बीस साल पहले लिखी गई फ़ाइलें आज भी खुल जाती हैं। पर विनिर्देश का प्रकाशित होना और उसका रॉयल्टी-मुक्त होना एक बात नहीं है: जहाँ फ़ॉर्मेट किसी कोडेक को अपने अंदर लपेटता है, वहाँ पेटेंट का लाइसेंस एक अलग सवाल है, और मानक उसका जवाब नहीं देता।

कुछ भी फेंका नहीं जाता

CSV फ़ाइल अपना अंदरूनी हिस्सा हूबहू सहेजती है। दोबारा सहेजने से कुछ नहीं बदलता, इसलिए इसे जितनी बार चाहें खोलिए, बदलिए और फिर से सहेजिए — नुक़सान जमा नहीं होता। यही बात इसे सौंपने का नहीं, काम करने का फ़ॉर्मेट बनाती है।

टिप्पणी छोड़ने की कोई जगह नहीं

CSV फ़ाइल में टिप्पणी लिखने का कोई तरीक़ा नहीं है। समझाने वाली हर बात फ़ाइल के बाहर रहनी पड़ेगी — इसे ऐसे किसी काम के लिए चुनने से पहले यह जान लेना चाहिए जिसे कोई इंसान हाथ से सँभालेगा।

CSV को खोलता कौन है

Microsoft Excel, LibreOffice Calc और pandas इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।

फ़ाइल न खुले तो कसूर फ़ॉर्मेट का शायद ही कभी होता है — अक्सर प्रोग्राम ही फ़ॉर्मेट से पुराना होता है। किसी पुरानी चीज़ में बदल लेना इससे निकलने का भरोसेमंद रास्ता है, और इस वेबसाइट का बाक़ी हिस्सा इसी के लिए है।

इसे ब्राउज़र में खोलना

इसे कोई भी ब्राउज़र नहीं पढ़ता।

इसे बदलने की सबसे आम वजह यही है: फ़ॉर्मेट ख़राब है, ऐसा नहीं — बात यह है कि जहाँ आप फ़ाइल दिखाना चाहते हैं वह जगह उसे पढ़ ही नहीं सकती।

यह काम करने का फ़ॉर्मेट है

CSV इसलिए बना है कि इसे खोला और बदला जाए। जब तक काम चल रहा है फ़ाइल इसी फ़ॉर्मेट में रखिए, और जब भी बनी हुई प्रति चाहिए हो, इसी से निर्यात कीजिए।

इसके साथ ग़लत क्या होता है

बार-बार आने वाली शिकायतें: कॉलम किस तरह के हैं, यह पढ़ते समय बताया नहीं, अंदाज़े से तय किया जाता है।

इनमें से कोई भी फ़ॉर्मेट से दूर रहने की वजह नहीं है। ये वे बातें हैं जिन्हें इनमें से कोई आपको चौंकाए उससे पहले जान लेना चाहिए — यह अलग दावा है, और ज़्यादा काम का।

सबसे सादा फ़ॉर्मेट जो सादा नहीं है

CSV कॉमा से अलग किए मूल्यों की पंक्तियाँ हैं, और यह विवरण तब तक टिकता है जब तक पहले मूल्य में कोई कॉमा न आ जाए। फिर उसे उद्धरण चाहिए, और उद्धृत मूल्य में उद्धरण चिह्न रखने का तरीक़ा चाहिए, और मूल्य में लाइन-ब्रेक रखने का तरीक़ा भी — और इनमें से हर नियम पर अलग-अलग सॉफ़्टवेयर असहमत होने लगते हैं।

RFC 4180 इन रिवाजों को 2005 में लिखने के लिए प्रकाशित हुआ, और यह साफ़ कहता है कि यह मौजूदा प्रथा दर्ज करता है, किसी मानक की परिभाषा नहीं देता। बीस साल बाद भी बहुत सारा सॉफ़्टवेयर इसका पालन नहीं करता। यही ईमानदार शुरुआती बिंदु है: CSV एक ही एक्सटेंशन पहने लगभग-संगत फ़ॉर्मेट का परिवार है।

उद्धरण ही वह हिस्सा है जो फ़ाइलें सचमुच तोड़ता है

कॉमा, उद्धरण चिह्न या newline वाले मूल्य को दोहरे उद्धरण में लपेटना ज़रूरी है, और ऐसे मूल्य के भीतर उद्धरण चिह्न को दो बार लिखा जाता है। यह सही करने पर मूल्य में लाइन-ब्रेक वाला पूरा पैराग्राफ़ भी समा सकता है।

ग़लत करने पर नुक़सान चुप रहता है। बिना-escape उद्धरण किसी पार्सर को बाक़ी पूरी फ़ाइल एक फ़ील्ड में निगलवा देता है। बिना-उद्धरण पते के भीतर कॉमा उस पंक्ति में उसके बाद हर कॉलम को एक जगह खिसका देता है — सिर्फ़ उस पंक्ति के लिए — और कोई एरर नहीं दिखाता।

अलगाने वाला चिह्न अक्सर कॉमा नहीं होता

उन देशों में जहाँ दशमलव अलगाने वाला कॉमा है — ज़्यादातर महाद्वीपीय यूरोप — स्प्रेडशीट सेमीकोलन से निर्यात करती हैं, क्योंकि «1,50» से भरी फ़ाइल नहीं तो पढ़ी ही नहीं जा सकती। एक्सटेंशन फिर भी .csv रहता है।

टैब तीसरा आम विकल्प है और यही TSV की वजह है, क्योंकि टैब लगभग कभी किसी मूल्य के भीतर नहीं आता। अगर CSV एक कॉलम में खुले, तो सबसे पहले अलगाने वाला चिह्न जाँचिए: फ़ाइल ठीक है, रीडर का अंदाज़ा ग़लत था।

जब तक कुछ तय न करे, सब कुछ स्ट्रिंग है

CSV में कोई प्रकार नहीं होता। अक्षर 0 0 1 2 3 फ़ाइल में बैठे हैं, और वे संख्या 123 बनें या पाठ "00123", यह पूरी तरह इस पर निर्भर करता है कि उन्हें कौन पढ़ रहा है।

यही स्प्रेडशीट द्वारा डेटा «खाने» की हर शिकायत की जड़ है: पिनकोड से शुरुआती शून्य ग़ायब होना, उत्पाद कोड तारीख़ बन जाना, लंबी पहचान संख्या फ़्लोटिंग पॉइंट में अपने आख़िरी अंक खो देना। यह सब फ़ाइल में नहीं है। यह खोलते वक़्त होता है।

एनकोडिंग, और वे अदृश्य तीन बाइट

CSV अपनी कैरेक्टर एनकोडिंग की कोई घोषणा नहीं ढोता। UTF-8 समझदार तयशुदा है और अब लगभग सब कुछ यही लिखता है; Windows पर Excel ऐतिहासिक रूप से क्षेत्रीय कोड-पेज मान लेता आया है, यही वजह है कि accent वाले अक्षरों से भरा निर्यात गड़बड़ अक्षरों में खुलता है।

आम तोड़-जोड़ है byte order mark लिखना — तीन अदृश्य बाइट जो Excel को बताते हैं फ़ाइल UTF-8 है। यह काम करता है, और अलग समस्या भी बनाता है: कई पार्सर उन बाइट को पहले कॉलम शीर्षक का हिस्सा मान लेते हैं, इसलिए "id" से मिलान चुपचाप असफल हो जाता है।

CSV सचमुच किस चीज़ में बेहतरीन है

स्ट्रीमिंग। याददाश्त से बड़ी फ़ाइल को कोई औज़ार पंक्ति-दर-पंक्ति पढ़ सकता है, कभी एक से ज़्यादा लाइन याददाश्त में रखे बिना, यही वजह है कि डेटा पाइपलाइन, डेटाबेस आयात और कमांड-लाइन उपयोगिताएँ सब इसी में बोलती हैं।

और पारदर्शिता। यह पाठ है, इसलिए इसमें कुछ छिप नहीं सकता — कोई मैक्रो नहीं, कोई बाहरी लिंक नहीं, दूसरी फ़ाइलों तक पहुँचने वाला कोई फ़ॉर्मूला नहीं। सुरक्षा को लेकर सचेत सिस्टम वर्कबुक की जगह CSV माँगते हैं, इसी वजह से।

ऐसी CSV लिखना जो कोई और पढ़ सके

पाँच आदतें लगभग हर समस्या रोकती हैं। बिना byte order mark के UTF-8 इस्तेमाल कीजिए। हर वह फ़ील्ड उद्धृत कीजिए जिसमें अलगाने वाला चिह्न, उद्धरण या लाइन-ब्रेक हो सकता है — या बस सब कुछ उद्धृत कर दीजिए, जो मान्य और सस्ता है। छोटे, साफ़ नामों वाली हेडर पंक्ति रखिए। तारीख़ ISO रूप में, साल पहले, लिखिए।

इनमें से कुछ भी किसी चीज़ से लागू नहीं होता, इसीलिए इसे जान-बूझकर करना ज़रूरी है। इन पाँच नियमों का पालन करने वाली CSV हर उस औज़ार में सही खुलती है जो उसे कभी पाएगा।

ज़रूरी जानकारी, एक जगह

CSV फ़ॉर्मेट की पहचान और उसका स्रोत।
एक्सटेंशन.csv
मीडिया टाइपtext/csv
पहली बार प्रकाशित1972
विनिर्देशRFC 4180

CSV फ़ाइलें: आम सवाल

मेरी CSV एक ही कॉलम में क्यों खुलती है

अलगाने वाला चिह्न वह नहीं है जो रीडर ने सोचा — अक्सर सेमीकोलन, जिसे दशमलव-कॉमा वाले देशों की स्प्रेडशीट तयशुदा निर्यात करती हैं, या टैब। फ़ाइल ठीक है; आयात संवाद में बताइए कि कौन-सा अक्षर मूल्य अलगाता है।

Excel मेरे शुरुआती शून्य क्यों हटा देता है

CSV में कोई प्रकार नहीं, इसलिए Excel हर कॉलम के लिए अंदाज़ा लगाता है और अंकों वाले कोड को संख्या मान लेता है। फ़ाइल आयात कीजिए और उन कॉलम को Text सेट कीजिए, या XLSX भेजिए जहाँ प्रकार घोषित होते हैं।

किसी मूल्य में कॉमा कैसे रखूँ

मूल्य को दोहरे उद्धरण में लपेटिए। उद्धृत मूल्य के भीतर उद्धरण चिह्न को दो बार लिखा जाता है। सही करने पर फ़ील्ड में कॉमा, उद्धरण और लाइन-ब्रेक तक हो सकते हैं; ग़लत करने पर हर आगे का कॉलम एक जगह खिसक जाता है और कोई एरर नहीं दिखता।

accent वाले अक्षर ग़लत क्यों दिखते हैं

फ़ाइल कोई एनकोडिंग घोषणा नहीं ढोती और रीडर ने अंदाज़ा लगाया। UTF-8 में सहेजिए; Windows पर Excel के लिए byte order mark मदद करता है, पर उससे दूसरे पार्सर उन तीन बाइट को पहले कॉलम शीर्षक का हिस्सा मान सकते हैं।

क्या CSV एक मानक है

RFC 4180 आम रिवाज़ दर्ज करता है और साफ़ कहता है कि यह मौजूदा प्रथा बताता है, मानक परिभाषित नहीं करता। बहुत सारा सॉफ़्टवेयर अब भी अलग चलता है, इसीलिए CSV को लगभग-संगत फ़ॉर्मेट का परिवार मानना बेहतर है।

CSV और TSV में क्या फ़र्क़ है

अलगाने वाले चिह्न का। TSV टैब इस्तेमाल करता है, जो लगभग कभी किसी मूल्य के भीतर नहीं आता, इसलिए उद्धरण की ज़रूरत शायद ही पड़ती है और कॉमा-भीतर-फ़ील्ड की पूरी समस्या ग़ायब हो जाती है।