2011-08-10 12 views
6

मैं एक "सीएसवी" फ़ाइल एक बहु स्तंभ सीमांकक का उपयोग करता है है, तो डेटा की तरहकर सकते हैं बहु-स्तंभ के साथ अजगर सीएसवी मॉड्यूल पार्स फ़ाइलों सीमांकक

field1_|#|_field2_|#|_field3_|#|_field4 

दिखता है वहाँ का उपयोग करने का कोई तरीका है इस फ़ाइल को पार्स करने के लिए पायथन सीएसवी मॉड्यूल?

धन्यवाद

+1

संबंधित: [डबल पाइप सीमित डेटा को विभाजित करने के लिए पाइथन सीएसवी मॉड्यूल का उपयोग कैसे करें] (http://stackoverflow.com/questions/6352409/how-to-use-python-csv-module-for-splitting- डबल- पाइप-सीमित डेटा) –

उत्तर

5

कोशिश singlechar एक के साथ multichar सीमांकक को बदलने के लिए।

समथिंग इस तरह:

class DelimitedFile: 
    def __init__(self, fname, mode='rb', ind=',', outd=','): 
    self.f = open(fname, mode) 
    self.ind = ind 
    self.outd = outd 

    def __iter__(self): 
    return self 

    def next(self): 
    line = self.f.next() 
    return line.replace(self.ind, self.outd) 

इतना है कि यह प्रयोग करें:

import csv 

delimiter = ',' 

reader = csv.reader(DelimitedFile(fileName, ind='_|#|_', outd=delimiter)) 

for row in reader: 
    print row 
+0

धन्यवाद, एलेक्स, मैं इसे एक शॉट दूंगा – zenzic

1

पायथन के सीएसवी मॉड्यूल एक से अधिक चरित्र का सीमांकक संसाधित नहीं कर सकता है, तो "करने के लिए कम जवाब कर सकते हैं अजगर सीएसवी मॉड्यूल मल्टी-कॉलम डिलीमीटर के साथ पार्स फाइलें? " कोई नहीं"। एक साधारण परीक्षण इस बात की पुष्टि:

reader = csv.reader(open('test.csv'), delimiter = '|#|') 

कौन सा यह त्रुटि हुई:

TypeError: "delimiter" must be an 1-character string

(के रूप में कोड में दिखाया गया test.csv सीमांकक के साथ एक 2 पंक्ति फ़ाइल था।)

इस प्रकार आप आपको या तो अपने डिलीमीटर को सिंगल कैरेक्टर डिलीमीटर के साथ प्रतिस्थापित करने की आवश्यकता होगी क्योंकि @alexblum ने सुझाव दिया है, अपना खुद का पार्सर लिखें, या एक अलग पार्सर ढूंढें। गूगलिंग 'पायथन सीएसवी मल्टी-कैरेक्टर डिलीमीटर' कुछ को हिट कर दिया।

संबंधित मुद्दे