2013-02-21 59 views
5

मैंने कुछ खोज की है लेकिन अधिकांश उत्तर एक पूर्ण सीएसवी फ़ाइल पढ़ने के बारे में है और इनमें से कोई भी समस्या का सामना नहीं कर रहा है।पायथन - लाइन की तरह सीएसवी को कैसे पढ़ा/पार्स करना है?

मैं नेट का उपयोग कर urllib2 से एक फ़ाइल को पढ़ने के लिए कोशिश कर रहा हूँ:

request = urllib2.Request('http://.../tv.txt') 
response = urllib2.urlopen(request) 
lines = response.readlines() 
for line in lines: 
    ... 

"पंक्ति" प्रारूप इस तरह दिखता है:

"ABC", "XYZ,MNO", "KLM" 
"ABC", "MN" 
"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY" 

जैसा कि ऊपर देखा, इन पंक्तियों नहीं वास्तव में सीएसवी हैं लाइनों। कॉलम की संख्या बदलती रहती है।

क्या प्रत्येक पंक्ति को सूची में विभाजित करने का कोई तरीका है? इच्छा परिणाम होना चाहिए:

["ABC", "XYZ,MNO", "KLM"] 
["ABC", "MN"] 
["ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"] 

मैं line.split (",") का उपयोग कर की कोशिश की है, लेकिन इसे सही ढंग से विभाजित नहीं कर सकते, क्योंकि वहाँ दोहरे उद्धरण चिह्नों की प्रत्येक जोड़ी के अंदर अल्पविराम है।

अगर आप जानते हैं कि कृपया मुझे कैसे मदद करें। आपका बहुत बहुत धन्यवाद।

चीयर्स,

पीएचपी-अजगर-जावा MySQL-नौसिखिया।

उत्तर

8

सीएसवी मॉड्यूल का उपयोग करें, यह आपको वही करता है जो आपको चाहिए।

yourstring= '"ABC", "XYZ,MNO", "KLM"\n"ABC", "MN"\n"ABC", "123", "10", "OPPA GANGNAM STYLE", "LADY"' 

import csv 
import StringIO 

class MyDialect(csv.Dialect): 
    strict = True 
    skipinitialspace = True 
    quoting = csv.QUOTE_ALL 
    delimiter = ',' 
    quotechar = '"' 
    lineterminator = '\n' 


b=StringIO.StringIO(yourstring) 
r=csv.reader(b,MyDialect()) 

for i in r: 
    print len(i), ':',' @ '.join(i) 
+1

जैसा कि सवाल में बताया गया है, मैंने सीएसवी मॉड्यूल की कोशिश की है। यदि आप मुझे बता सकते हैं कि सीएसवी मॉड्यूल में कौन सा फ़ंक्शन है, तो यह बहुत अच्छा होगा। मैं csv.reader में पंक्ति ([लाइन]) के लिए की कोशिश की है: प्रिंट पंक्ति इस प्रति http://docs.python.org/2/library/csv.html#examples लेकिन कोई सफलता – markbse

+0

कि स्पष्ट है अभि बहोत हो गया? – LtWorf

+0

धन्यवाद। प्रतीक्षा करते समय मैंने CSV से JSON प्रारूप में स्रोत बदल दिया है, इसलिए आपकी स्क्रिप्ट का परीक्षण नहीं किया है, लेकिन इसे उत्तर के रूप में चिह्नित किया जाएगा। – markbse