Package obitools :: Package table :: Module csv
[hide private]
[frames] | no frames]

Source Code for Module obitools.table.csv

 1  """ 
 2  obitools.table.csv module provides an iterator adapter 
 3  allowing to parse csv (comma separatted value) file 
 4  """ 
 5   
 6  import re 
 7   
8 -def csvIterator(lineIterator,sep=','):
9 ''' 10 Allows easy parsing of a csv file. This function 11 convert an iterator on line over a csv text file 12 in an iterator on data list. Each list corresponds 13 to all values present n one line. 14 15 @param lineIterator: iterator on text lines 16 @type lineIterator: iterator 17 @param sep: string of one letter used as separator 18 blank charactere or " is not allowed as 19 separator 20 @type sep: string 21 @return: an iterator on data list 22 @rtype: iterator 23 ''' 24 assert len(sep)==1 and not sep.isspace() and sep!='"' 25 valueMatcher=re.compile('\s*((")(([^"]|"")*)"|([^%s]*?))\s*(%s|$)' % (sep,sep)) 26 def iterator(): 27 for l in lineIterator: 28 yield _csvParse(l,valueMatcher)
29 return iterator() 30 31
32 -def _csvParse(line,valueMatcher):
33 data=[] 34 i = iter(valueMatcher.findall(line)) 35 m = i.next() 36 if m[0]: 37 while m[-1]!='': 38 if m[1]=='"': 39 data.append(m[2].replace('""','"')) 40 else: 41 data.append(m[0]) 42 m=i.next() 43 if m[1]=='"': 44 data.append(m[2].replace('""','"')) 45 else: 46 data.append(m[0]) 47 return data
48