def createReader(readable, **keywords): """ A reader fitting the contents of ``readable``. Supported formats are delimited data (such as CSV), ODS and Excel. When iterating the reader, it returns a Python array for each row of data. """ # TODO: Get rid of circular import. import _parsers assert readable is not None encoding = keywords.get("encoding", DEFAULT_ENCODING) assert encoding is not None result = None icdHeader = readable.read(4) _log.debug(u"header=%r", icdHeader) if icdHeader == _ODS_HEADER: # Consider ICD to be ODS. readable.seek(0) result = _parsers.odsReader(readable) else: icdHeader += readable.read(4) readable.seek(0) if _tools.isEqualBytes(icdHeader, _EXCEL_HEADER): # Consider ICD to be Excel. result = _parsers.excelReader(readable) else: # Consider ICD to be CSV. dialect = _parsers.DelimitedDialect() dialect.lineDelimiter = _parsers.AUTO dialect.itemDelimiter = _parsers.AUTO dialect.quoteChar = "\"" dialect.escapeChar = "\"" result = _parsers.delimitedReader(readable, dialect, encoding) return result
def testIcdCustomersXls(self): icdCustomersIcdXlsPath = dev_test.getTestIcdPath("customers.xls") readable = open(icdCustomersIcdXlsPath, "rb") try: for row in _parsers.excelReader(readable): self.assertTrue(row is not None) self.assertTrue(len(row)) except _parsers.CutplaceXlrdImportError: _log.warning("ignored ImportError caused by missing xlrd") finally: readable.close()
def testCellValue(self): fieldTypesXlsPath = dev_test.getTestInputPath("fieldtypes.xls") readable = open(fieldTypesXlsPath, "rb") try: titleRowSkipped = False for row in _parsers.excelReader(readable): self.assertTrue(row is not None) self.assertTrue(len(row) == 3, "row=%r" % row) if titleRowSkipped: self.assertEqual(row[1], row[2], "row=%r" % row) else: titleRowSkipped = True except _parsers.CutplaceXlrdImportError: _log.warning("ignored ImportError caused by missing xlrd") finally: readable.close()