Lectura de contenidos de archivo excel en python webapp2

Tengo dos archivos: sample.csv y sample.xlsx, todos esos archivos se almacenan en blobstore. Puedo leer los registros del archivo csv (que está en blobstore) usando el siguiente código

blobReader = blobstore.BlobReader(blob_key) inputFile = BlobIterator(blobReader) if inputFile is None: values = None else: try: stringReader = csv.reader(inputFile) data = [] columnHeaders = [] for rowIndex, row in enumerate(stringReader): if(rowIndex == 0): columnHeaders = row else: data.append(row) values = {'columnHeaders' : columnHeaders, 'data' : data} except: values = None self.response.write(values) 

La salida del código anterior de un archivo sample.csv es

 {'columnHeaders': ['First Name', 'Last Name', 'Email', 'Mobile'], 'data': [['fx1', 'lx2', 'flx1x2@xxx.com', 'xxx-xxx-xxxx'], ['fy1', 'ly2', 'fly1y2@yyy.com', 'yyy-yyy-yyyy'], ['fz1', 'lz2', 'flz1z2@zzz.com', 'zzz-zzz-zzzz']]} 

Al usar el paquete xlrd, puedo leer el contenido del archivo de Excel, pero en esto tengo que especificar la ubicación exacta del archivo

  book = xlrd.open_workbook('D:/sample.xlsx') first_sheet = book.sheet_by_index(0) self.response.write(first_sheet.row_values(0)) cell = first_sheet.cell(0,0) self.response.write(cell.value) 

¿Hay alguna forma de leer el contenido del archivo de Excel en blobstore? Lo he probado con el siguiente código.

  blobReader = blobstore.BlobReader(blobKey) uploadedFile = BlobIterator(blobReader) book = xlrd.open_workbook(file_contents=uploadedFile) (or) book = xlrd.open_workbook(file_contents=blobReader) 

Pero arroja un error TypeError: el objeto ‘BlobReader’ no tiene el atributo ‘ getitem ‘.

¿Algunas ideas? Gracias..

Buscando en el documento para open_workbook en el paquete de documentos xlrd, parece que cuando pasa “file_contents”, está esperando una cadena.

Luego, debe considerar convertir un Blob en una cadena, lo que se puede hacer con BlobReader.read () , que le proporciona una cadena de los datos leídos.