用python判断Excel单元格格式为输出日期(日期字段位置不固定)的,按datetime格式输出日期(而非float)

目前的逻辑:
for sheetName in wb.sheet_names():
with open(full_txt_name, mode='a') as txtFile:
sheet = wb.sheet_by_name(sheetName)
for rownum in range(1,sheet.nrows):
for colnum in range(0,sheet.ncols):
v1 = sheet.cell(rownum, colnum).value
if (type(v1) == float):
v1 = str(v1)
v1 = re.sub('\.0*$', "", v1)
txtFile.write(v1)
if colnum<sheet.ncols-1:
txtFile.write('|')
else:
txtFile.write('\n')
txtFile.close()
效果:
Excel表中某字段展现为2016-6-14 17:35:00
转为txt后为42535.7326388889

需要,转为txt后为2016-6-14 17:35:00或20160614

虽然通过增加下列代码
from xlrd import xldate_as_tuple
from datetime import datetime
v1 = datetime(*xldate_as_tuple(v1,0))
能将浮点转成需要的日期,但是对于非数值字段,就会报错
invalid literal for int() with base 10:'anycharacter'
并且会误杀金额类float

不知道如何判断Excel格式,请大神指点,谢谢!

你是用pyExcelerator还是xlrd读的excel?如果是xlrd那它自带一个xldate_as_tuple函数,可以转成datetime,比如:

from datetime import datetime
from xlrd import xldate_as_tuple

d=datetime(*xldate_as_tuple(x,0))#x就是你那串数字的变量

如果是用pyExcelerator,那好象它没有类似的函数,可以用下面这个函数:

def xldate_as_datetime(xldate, datemode=0):
if datemode not in (0, 1):
raise XLDateBadDatemode(datemode)
if xldate == 0.00:
return datetime.time(0, 0, 0)
if xldate < 0.00:
raise XLDateNegative(xldate)
xldays = int(xldate)
frac = xldate - xldays
seconds = int(round(frac * 86400.0))
assert 0 <= seconds <= 86400
if seconds == 86400:
seconds = 0
xldays += 1
#if xldays >= _XLDAYS_TOO_LARGE[datemode]:
# raise XLDateTooLarge(xldate)
if xldays == 0:
# second = seconds % 60; minutes = seconds // 60
minutes, second = divmod(seconds, 60)
# minute = minutes % 60; hour = minutes // 60
hour, minute = divmod(minutes, 60)
return datetime.time(hour, minute, second)
if xldays < 61 and datemode == 0:
raise XLDateAmbiguous(xldate)
return (
datetime.datetime.fromordinal(xldays + 693594 + 1462 * datemode)
+ datetime.timedelta(seconds=seconds)
)

用法:
d=xldate_as_datetime(x)#x就是你那串数字的变量追问

我用的是xlrd,并且我知道tuple
问题不在于如何把float转换成datetime,我在问题中已经列举了你说的xldate_as_tuple;
问题在于如何判断我从excel读进来的数据处理成日期还是不做处理的金额,在excel中显示为时间和金额,读进来的变量都是float,又要同时处理字符串。主要是识别的问题。

温馨提示:内容为网友见解,仅供参考
无其他回答

...怎么才能还原成日期格式,我的日期是datetime类型
from datetime import datetime from xlrd import xldate_as_tuple d=datetime(*xldate_as_tuple(x,0))#x就是你那串数字的变量 如果是用pyExcelerator,那好象它没有类似的函数,可以用下面这个函数:def xldate_as_datetime(xldate, datemode=0):if datemode not in (0, 1):raise XLDateBadDatemode...

python中时间日期格式的类型的转换(含pandas)
一、日期时间格式转字符 例如,要获取当前日期并将其表示为字符串形式,我们通常使用datetime模块。例如,当前日期“2018-09-08 22:32:46”,若需转化为“2018-09-08”或“20180908”,则应用datetime内置的strftime函数进行格式化。二、字符转日期时间 转换字符形式的日期时间,我们有两种主要方法。一种是...

Python 日期和时间的几种输出格式
time 模块, datetime模块 都可以,一种方式是转化为格式化后的日期格式,也就是说输出的日期是字符串格式的,当然,如果你希望还是日期类型的话,再转回日期类型就行了

用python判断是否为一个合法日期
date = date.split('\/')m = int(date[0])d = int(date[1])y = int(date[2])try:datetime.date(y,m,d)return true except:return false

Python:日期写入Excel出错?
1.打开excel。2.选中输入的单元格,单击右键,选择“设置单元格格式”,选择数值,点击确定。即可。对比图如下:

1.日期数据转换
首先,使用pd.to_datetime 函数将不同格式的日期默认转换为年-月-日格式,如 pd.to_datetime(df['日期列名'])。对于多列日期时间的组合,同样使用pd.to_datetime ,将特定列组合成一列,默认转换为年-月-日 时-分-秒格式,注意组合时必须包含年、月、日字段,小时、分钟、秒可选。对于日期的...

Python日期格式处理
日期时间格式化在数据处理中至关重要,Python通过datetime模块的strftime()函数实现。以'%Y-%m-%d'格式化日期为例,返回字符串形式的日期。日期时间差计算用于分析时间跨度,Python使用datetime模块的timedelta类实现。例如,计算两个日期之间相差的天数,利用timedelta对象的days属性。时间戳是将日期转换为时间的...

python输入年月判断当月多少天(2023年最新解答)
python任意输入一个月份(1—12),判断该月份有多少天(不考虑2月份29天的特殊情况)? defmonth(n): ifnin[1,3,5,7,8,10,12]: return31 elifnin[4,6,9,11]: return30 elifnin[2]: return28 else: returnn,"isnotamonth"Python:输入年月日判断是此年的第多少天 #今天日期减去年12月31日的日期即可...

Python中的datetime模块:轻松拿捏时间操作
格式化日期时间是datetime模块的重要功能之一,允许开发者将日期时间对象转换为字符串,并按照特定格式显示结果,满足不同场景的显示需求。时区操作 处理时区在日期时间操作中至关重要。datetime模块提供timezone类,用于处理与时区相关的问题,确保跨地域应用的准确性和一致性。总结 datetime模块是Python中处理日期...

如何处理datetime的时间格式
一、了解datetime时间格式 在Python中,处理日期和时间常用的库是datetime模块。datetime模块中的时间格式有多种,常见的是以年、月、日、时、分、秒等组合表示的时间点。了解这些格式是处理时间的基础。二、转换时间格式 当我们需要处理不同格式的时间数据时,可能需要进行时间格式的转换。可以使用datetime...

相似回答