Leyendo datos de Excel numéricos como texto usando xlrd en Python

Estoy tratando de leer un archivo de Excel usando xlrd, y me pregunto si hay una manera de ignorar el formato de celda usado en el archivo de Excel, ¿y solo importar todos los datos como texto?

Aquí está el código que estoy usando para lejos:

import xlrd xls_file = 'xltest.xls' xls_workbook = xlrd.open_workbook(xls_file) xls_sheet = xls_workbook.sheet_by_index(0) raw_data = [['']*xls_sheet.ncols for _ in range(xls_sheet.nrows)] raw_str = '' feild_delim = ',' text_delim = '"' for rnum in range(xls_sheet.nrows): for cnum in range(xls_sheet.ncols): raw_data[rnum][cnum] = str(xls_sheet.cell(rnum,cnum).value) for rnum in range(len(raw_data)): for cnum in range(len(raw_data[rnum])): if (cnum == len(raw_data[rnum]) - 1): feild_delim = '\n' else: feild_delim = ',' raw_str += text_delim + raw_data[rnum][cnum] + text_delim + feild_delim final_csv = open('FINAL.csv', 'w') final_csv.write(raw_str) final_csv.close() 

Este código es funcional, pero hay ciertos campos, como el código postal, que se importan como números, por lo que tienen el sufijo del cero decimal. Por ejemplo, si hay un código postal de ‘79854’ en el archivo de Excel, se importará como ‘79854.0’.

He intentado encontrar una solución en esta especificación xlrd , pero no tuve éxito.

Esto se debe a que los valores enteros en Excel se importan como flotantes en Python. Por lo tanto, sheet.cell(r,c).value devuelve un valor flotante. Intente convertir los valores a números enteros, pero primero asegúrese de que esos valores fueran enteros en Excel para comenzar con:

 cell = sheet.cell(r,c) cell_value = cell.value if cell.ctype in (2,3) and int(cell_value) == cell_value: cell_value = int(cell_value) 

Todo está en la especificación xlrd .

Sé que esto no es parte de la pregunta, pero me gustaría deshacerme de raw_str y escribir directamente en tu csv. Para un archivo grande (10,000 filas) esto ahorrará mucho tiempo.

También puede deshacerse de raw_data y simplemente usar uno para bucle.