我是一名PHP程序员,正在做一些Python(3.4),因为它在Python中更容易实现。 我的脚本将.xlsx文件转换为许多.csv文件(每张一个.csv)。
以下是代码:
wb = xlrd.open_workbook(filepath)
for i in range(0, wb.nsheets):
sh = wb.sheet_by_index(i)
sheet_name = sh.name
sheet_name = sheet_name.replace(" ", "_");
fp = open(sheet_name+'.csv', 'at', encoding='utf8')
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for row_num in range(sh.nrows):
wr.writerow(sh.row_values(row_num))
fp.close()
此处的完整代码:https://github.com/xtrimsky/xlsx_to_csv
这很好用,除了我有一个日期字段,例如:extes显示:01/01/2009
但最终的csv,包含一个39814的数字。请问这是什么,我能用它做什么? 01/02/2009是39815。
这是我用来查找unix时间戳的数字吗?或者这是一个问题,我应该改变我的脚本?如果它只是返回字符串" 01/01/2009"我会觉得更安全。
有人可以帮我理解我正在处理的事情吗?
答案 0 :(得分:5)
如果39814映射到2009-1-1和39815映射到2009-1-2,那么看起来序数正在计算自1899-12-30以来的天数:
In [57]: DT.date(1899,12,30) + DT.timedelta(days=39814)
Out[57]: datetime.date(2009, 1, 1)
要将Excel编号转换为Unix时间戳,可以使用timetuple
method将datetime.date
对象转换为时间元组,然后使用time.mktime将其转换为时间戳(秒)自大纪元以来:
In [80]: import time
In [81]: time.mktime((DT.datetime(1899,12,30) + DT.timedelta(days=39814)).timetuple())
Out[81]: 1230786000.0