È possibile creare un oggetto wrapper attorno al file che rimuove gli spazi prima che il lettore CSV li veda. In questo modo, puoi anche utilizzare il file CSV con cvs.DictReader.
import re
class CSVSpaceStripper:
def __init__(self, filename):
self.fh = open(filename, "r")
self.surroundingWhiteSpace = re.compile("\s*;\s*")
self.leadingOrTrailingWhiteSpace = re.compile("^\s*|\s*$")
def close(self):
self.fh.close()
self.fh = None
def __iter__(self):
return self
def next(self):
line = self.fh.next()
line = self.surroundingWhiteSpace.sub(";", line)
line = self.leadingOrTrailingWhiteSpace.sub("", line)
return line
Quindi utilizzare in questo modo:
o = csv.reader(CSVSpaceStripper(filename), delimiter=";")
o = csv.DictReader(CSVSpaceStripper(filename), delimiter=";")
ho hard-coded ";"
essere il delimitatore. La generalizzazione del codice a qualsiasi delimitatore viene lasciata come esercizio al lettore.
fonte
2014-05-30 14:41:57
Questa è la migliore soluzione possibile utilizzando il modulo 'csv'. La classe 'Reader' restituita dalla funzione' csv.reader() 'non è esposta nel modulo' csv' o '_csv' per permettere di sovrascrivere il suo metodo' next() '. – CivFan