【发布时间】:2016-04-15 18:24:55
【问题描述】:
我有一个 excel 文件,它有 3 列作为日期时间或日期或时间字段。我正在通过xlrd 包阅读它,我想我得到了 milliseconds 的时间,当我试图将它转换回日期时间时,我得到了错误的结果。
我也尝试将文件转换为csv。这也无济于事,而且我得到了我无法理解的奇怪的日期时间格式。
这是我尝试使用xlrd 格式的方法。我更喜欢使用带有.xlrs 扩展名的文件作为输入,因为否则我每次得到一个新的输入文件时都必须将excel 文件转换为.csv。
from xlrd import open_workbook
import os,pickle,datetime
def main(path, filename, absolute_path_organisation_structure):
absolute_filepath = os.path.join(path,filename)
wb = open_workbook(absolute_filepath)
for sheet in wb.sheets():
number_of_rows = sheet.nrows
number_of_columns = sheet.ncols
for row_index in xrange(1, sheet.nrows):
row=[]
for col_index in xrange(4,7): #4th and 6th columns are date fields
row.append(sheet.cell(row_index, col_index).value)
print(row) #Relevant list formed with 4th, 5th and 6th columns
print(datetime.datetime.fromtimestamp(float(row[0])).strftime('%Y-%m-%d %H:%M:%S'))
path = "C:\\Users\\***************\\NEW DATA"
MISfile = "P2P_2015 - Copy.xlsx"
absolute_path_organisation_structure = "C:\\Users\\******************NEW DATA\\organisation.csv"
main(path, MISfile, absolute_path_organisation_structure)
结果:
[42011.46789351852, u'Registered', 42009.0]
1970-01-01 17:10:11
[42011.46789351852, u'Sent for CTG1 approval', 42010.0]
1970-01-01 17:10:11
[42011.46789351852, u'Sent back', 42010.0]
1970-01-01 17:10:11
[42011.46789351852, u'Registered', 42011.0]
1970-01-01 17:10:11
[42011.46789351852, u'Sent for CTG1 approval', 42011.0]
1970-01-01 17:10:11
[42011.46789351852, u'Sent for CTG2 approval', 42012.0]
1970-01-01 17:10:11
[42011.46789351852, u'CTG2 Approved', 42012.0]
1970-01-01 17:10:11
[42011.46789351852, u'Sent back', 42013.0]
1970-01-01 17:10:11
[42170.61667824074, u'Registered', 42144.0]
1970-01-01 17:12:50
[42170.61667824074, u'Registered', 42144.0]
1970-01-01 17:12:50
[42170.61667824074, u'Sent back', 42165.0]
1970-01-01 17:12:50
[42170.61667824074, u'Sent back', 42165.0]
1970-01-01 17:12:50
[42170.61667824074, u'Registered', 42170.0]
1970-01-01 17:12:50
[42170.61667824074, u'Registered', 42170.0]
1970-01-01 17:12:50
实际输入文件:(从excel复制)
1/7/2015 11:13 Registered 1/5/2015 0:00
1/7/2015 11:13 Sent for CTG1 approval 1/6/2015 0:00
1/7/2015 11:13 Sent back 1/6/2015 0:00
1/7/2015 11:13 Registered 1/7/2015 0:00
1/7/2015 11:13 Sent for CTG1 approval 1/7/2015 0:00
1/7/2015 11:13 Sent for CTG2 approval 1/8/2015 0:00
1/7/2015 11:13 CTG2 Approved 1/8/2015 0:00
1/7/2015 11:13 Sent back 1/9/2015 0:00
6/15/2015 14:48 Registered 5/20/2015 0:00
6/15/2015 14:48 Registered 5/20/2015 0:00
6/15/2015 14:48 Sent back 6/10/2015 0:00
6/15/2015 14:48 Sent back 6/10/2015 0:00
6/15/2015 14:48 Registered 6/15/2015 0:00
6/15/2015 14:48 Registered 6/15/2015 0:00
为什么我无法正确读取日期?为什么它们不简单地作为字符串出现以便我可以轻松地转换它们?
【问题讨论】:
标签: python excel csv datetime xlrd