2015-11-30 138 views
1

我對Python非常陌生,並且已經在從Excel列表中導入一系列度量值的時間戳等簡單任務中掙扎。 excel文件有一個日期列和一個時間列。我需要的數據進一步計算,如時差等如何從python中的excel列表中讀取時間戳

我試圖以不同的方式如何獲取數據。到目前爲止,我的代碼看起來是這樣的:

  1. 法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() takes exactly 2 arguments (3 given)

  2. 方法與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' object is not iterable

有人知道如何幫助我嗎? 我欣賞每一個提示。

+1

關於第一個方法:串聯''input_date'and input_time'到單個串:'strptime(input_date + 「」 + input_time,「%A,%d%B%Y%H:%M: %S「)' – schwobaseggl

+0

感謝您的快速回復。 現在它說: ValueError:時間數據'日期時間'不符合格式'%d%b%Y%H:%M:%S' 在Excel文件中,我把日期設置爲DD/MM/YYYY時間爲HH:MM:SS – Annika

+0

確保您傳遞的格式與串聯的字符串匹配。 https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior – schwobaseggl

回答

1

關於您的第一個解決方案,strptime只接受一個日期字符串作爲輸入。 你應該加入input_dateinput_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")) 

現在,您可以訪問列表times中的每個datetime。要計算時差,可以查看timedelta上的文檔。

#Create a timedelta object 
t1 = times[1] - times[0] 
#Convert time difference in seconds 
t2 = t1.total_seconds() 
+0

其實我想創建一個完整的時間戳列表,以便我可以計算不同行之間的時間差。更復雜的是,我有很多系列的測量,因爲有很多用戶。 隨着你的最後一個代碼,我得到這個錯誤TypeError:序列項目1:預期的str實例,datetime.time發現 – Annika

+0

有些事情可能會出現'join'錯誤。代碼適用於我的 'data_meas = np.array([['Mon,2015年11月30日','18:20:00'],['Sat,2015年11月9日','21:20:00' ]])' 您可以使用當前版本的代碼更新該問題嗎? – sim0ne

+0

此代碼正在工作,但我無法通過索引調用時間。你有沒有想法如何在每次需要時調用每一行的時間戳來計算時間差異? 對於n在範圍(LEN(用戶)): 片= pe.get_sheet(FILE_NAME =用戶[n]的,name_columns_by_row = 0) 片= sheet.to_array() data_meas = np.array(片材) 用於(len(data_meas)-2): #input_time = data_meas [row + 2,1] input_date = data_meas [row + 2,0] times = [datetime.datetime.strptime(input_date,「% %d%m%Y%H%M%S「)] times = np.array(times) delta = times [2] -times [1] – Annika

相關問題