我是python的新手,并且已经在努力完成一项简单的任务,比如从excel列表中导入一系列测量的时间戳。 excel文件有一列用于日期,一列用于时间。我需要数据进行进一步的计算,如时差等。
我尝试了不同的方法来获取数据。到目前为止,我的代码看起来像这样:
使用pyexcel的方法
import pyexcel as pe
import datetime
import time
from datetime import time
import timestring
for n in range(len(users)):
sheet = pe.get_sheet(file_name=users[n],name_columns_by_row=0)
sheet = sheet.to_array()
data_meas = np.array(sheet)
for row in range(len(data_meas)):
print(type(row))
input_time = data_meas[row,1]
input_date = data_meas[row,0]
times = [datetime.datetime.strptime(input_date, input_time, "%d %b %Y %H:%M:%S")]
我在最后一行收到此错误:
TypeError:strptime()只需要2个参数(给定3个)
使用xlrd的方法
import xlrd
from datetime import time
inputdata = xlrd.open_workbook('file.xls')
sheet = inputdata.sheet_by_index(0)
for row in sheet:
input_date=sheet.cell_value(row,0)
input_time=sheet.cell_value(row,1)
date_values = xlrd.xldate_as_tuple(input_time, inputdata.datemode)
time_value = time(*date_values[3:])
TypeError:' Sheet'对象不可迭代
有人知道如何帮助我吗? 我很欣赏每一个提示。
答案 0 :(得分:1)
关于您的第一个解决方案,strptime
只接受一个日期字符串作为输入。
您应该加入input_date
和input_time
:
input_time = '18:20:00'
input_date = 'Mon, 30 Nov 2015'
time = datetime.datetime.strptime(' '.join([input_date, input_time]), "%a, %d %b %Y %H:%M:%S")
要创建datetime
个对象的完整列表,您可以尝试:
times = [datetime.datetime.strptime(' '.join([data_meas[row,0], data_meas[row,1]]), "%a, %d %b %Y %H:%M:%S") for row in range(len(data_meas))]
修改强>
如果您想保留for loop
,则必须将每个datetime
对象附加到您的列表中(否则您只会保留上次日期):
data_meas = np.array([['07/11/2015 18:20:00'],['09/11/2015 21:20:00']])
#list initilization
times = []
for row in range(len(data_meas)):
input_date = data_meas[row,0]
#we add a new item to our list
times.append(datetime.datetime.strptime(input_date, "%d/%m/%Y %H:%M:%S"))
现在,您可以访问列表datetime
中的每个times
。要计算时差,您可以查看timedelta上的文档。
#Create a timedelta object
t1 = times[1] - times[0]
#Convert time difference in seconds
t2 = t1.total_seconds()