यदि आप क्या आप प्राप्त करने के लिए कोशिश कर रहे हैं की साफ होता है मुझे समझ नहीं आता था।
आप कहते हैं "मुझे पता है (...) मेरा उपयोग केस दुरुपयोग है"।
लेकिन दुर्व्यवहार का तात्पर्य है कि उपयोग की संभावना मौजूद है।
हालांकि, आपके मामले में, कोई संभावित उपयोग नहीं है, जिसे आपने "वर्णित" असंभव है क्योंकि सीएसवी पार्सर को जो पास किया गया है वह वैध सीएसवी प्रारूप का होना चाहिए और आपका नहीं है।
एक CSV मान्य स्ट्रिंग में, अधिकांश वर्ण जानकारी हैं और कुछ वर्ण जानकारी निकालने के लिए स्ट्रिंग की व्याख्या करने के लिए मेटा-सूचना आवश्यक हैं।
आप जो वर्णन करते हैं वह यह है कि आप चाहते हैं कि वर्ण "
सूचना श्रेणी और मेटा-सूचना श्रेणी में पूरी तरह से हो। ऐसा लगता है कि कोई व्यक्ति अपने बाएं हाथ को अपने बाएं हाथ से पकड़ना चाहता है .....
यह समस्या आपकी स्ट्रिंग के साथ हो रही है क्योंकि यह एक CSV फ़ाइल पढ़ने से आने वाली स्ट्रिंग नहीं है। यह एक स्ट्रिंग है जैसा लिखा है।
सीएसवी फ़ाइल के पढ़ने से इस तरह की एक स्ट्रिंग प्राप्त करना असंभव है, क्योंकि यह CSV फ़ाइल में इस तरह लिखा नहीं जा सका।
तो एक CSV फ़ाइल में लिखा है, '"simple|split"|test'
"""simple|split"""|test
लिखा जा सकता है
या #"simple#|split#"|test
doublequote = False, escapechar = '#'
साथ सही पर doublequote
सेट, डिफ़ॉल्ट के साथ।
आप जानकारी निकालने के लिए जैसे आप वर्णित है, यदि आप एक पार्सर बनाने के लिए नहीं है, तो आप सिर्फ एक पहले से ही विद्यमान उपकरण का उपयोग करने के लिए है चाहते हैं:
import re
reg = re.compile('".*?"|[^|]+')
print reg.findall('yoo|"simple|split"|test|end"pos|hu')
परिणाम
['yoo', '"simple|split"', 'test', 'end"pos', 'hu']
आप करेंगे अपना खुद का पार्सर लिखना है। उद्धरण डेटा से बचने का माध्यम हैं जो अन्यथा एक कॉलम के रूप में नहीं देखा जाएगा, और इस प्रकार आउटपुट का हिस्सा नहीं माना जाता है। –
डेटा कितना जटिल है, इस पर निर्भर करता है कि आप धोखा देने और 'फ़िल्टर (कोई नहीं, re.split (आर '("। *? ") | \ |', एस) जैसे कुछ भयानक उपयोग करने में सक्षम हो सकते हैं)' - या देखो 'pyparsing' में –
हैलो, मैंने एक उत्तर पोस्ट किया जिसमें वास्तव में मैं विकसित हुआ कि मार्टजिन और जॉन ने क्या कहा है। क्या आप कृपया कह सकते हैं कि आपने रेगेक्स का उपयोग क्यों नहीं किया? – eyquem