我正在使用 xlrd 读取exel文件,并且有一些带有日期值的单元格:
问题是 xlrd 会将这些值读取为数字。我试图将单元格的类型更改为字符串,但是excel也将其转换为数字。
这是我读取文件的相关代码:
def import_partners(self):
sheet = xlrd.open_workbook(os.getcwd()+settings.MEDIA_URL+'socios.xls', encoding_override="cp1252").sheet_by_index(0)
rows = sheet.nrows
for row in range(1, sheet.nrows):
print("Importing partners: {}%\r".format(int((row/rows)*100)), end="")
record = self.get_record('partner', sheet, row)
self.save_record('partner', record)
def get_record(self, type, sheet, row):
record_getters = {
'partner': self.get_partner_record,
'operator': self.get_operator_record
}
record = record_getters[type](sheet, row)
return record
def get_partner_record(self, sheet, row):
record = {
'clase': self.get_socio_clase(sheet, row),
'economico': self.get_socio_economico(sheet, row),
'nombre': self.get_socio_nombre(sheet, row),
'apellido': self.get_socio_apellido(sheet, row),
'fecha_nacimiento': self.get_socio_fecha_nacimiento(sheet, row),
'lugar_nacimiento': self.get_socio_lugar_nacimiento(sheet, row),
'apodo': self.get_socio_apodo(sheet, row),
'municipio': self.get_socio_municipio(sheet, row),
'telefono': self.get_socio_telefono(sheet, row),
'rfc': self.get_socio_rfc(sheet, row),
'sexo': self.get_socio_sexo(sheet, row),
'fecha_ingreso': self.get_socio_fecha_ingreso(sheet, row),
'tipo_sangre': self.get_socio_tipo_sangre(sheet, row),
'edo_civil': self.get_socio_edo_civil(sheet, row),
'quien_cede': self.get_socio_cede(sheet, row),
'licencia': self.get_socio_licencia(sheet, row),
'vence_licencia': self.get_socio_vence_licencia(sheet, row),
'tipo_licencia': self.get_socio_tipo_licencia(sheet, row),
'expedida': self.get_socio_expedida(sheet, row),
'activo': self.get_socio_activo(sheet, row),
}
return record
def get_socio_fecha_nacimiento(self, sheet, row):
fecha = sheet.cell(row, SOCIO_COL_FECHA_NACIMIENTO).value
if fecha != '':
return self.get_date(fecha)
else:
return None
def get_date(self, fecha):
try:
date_array = fecha.split('/')
except:
return None
if len(date_array) != 3:
return None
date = datetime.date(date_array[2], date_array[1], date_array[0])
return date
此代码不起作用,因为我期望一个格式为“%d /%m /%y”的字符串,但是我得到的是浮点数。
编辑
我在How to read dates using xlrd?中尝试了该解决方案:
def get_date(self, book, fecha):
date = datetime.datetime(*xlrd.xldate_as_tuple(fecha, book.datemode))
return date
但是我有这个例外:
File "/Users/hugovillalobos/Documents/Code/TaxistasProject/TaxistasVenv/lib/python3.7/site-packages/xlrd/xldate.py", line
95, in xldate_as_tuple
if xldate < 0.00:
TypeError: '<' not supported between instances of 'str' and 'float'