在Python中使用xlrd将数字Excel数据作为文本读取

我正在尝试使用xlrd读取Excel文件,我想知道是否有一种方法可以忽略Excel文件中使用的单元格格式,只需将所有数据导入为文本?

这里是我使用的代码:

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() 

此代码function正常,但是某些字段(如邮政编码)作为数字导入,因此它们具有小数零后缀。 例如,在Excel文件中是否有“79854”的邮政编码,将被导入为“79854.0”。

我曾尝试在xlrd规范中find解决scheme,但未成功。

这是因为Excel中的整数值是作为Python中的浮点数导入的。 因此, sheet.cell(r,c).value返回一个浮点数。 尝试将值转换为整数,但首先确保这些值是在Excel中的整数开始:

 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) 

这一切都在xlrd规范 。

我知道这不是问题的一部分,但我会摆脱raw_str并直接写入您的csv。 对于一个大文件(10,000行),这将节省大量的时间。

你也可以摆脱raw_data ,只使用一个for循环。