2013-07-23 34 views
0

我拼命地讀取並轉換一個txt文件是這樣的:讀CSV /與genfromtxt txt文件,而分離的數字和日期時間值

file.txt的


Line,Date Time,Celsius(°C),Humidity(%rh),Dew Point(°C),Serial Number 
1,10-06-2013 18:25:00,24.0,48.5,12.5,990121703 
2,10-06-2013 18:30:00,24.0,48.0,12.3 
3,10-06-2013 18:35:00,23.5,48.5,12.0 
4,10-06-2013 18:40:00,23.5,49.0,12.2 
5,10-06-2013 18:45:00,23.5,49.0,12.2 
6,10-06-2013 18:50:00,23.5,49.0,12.2 
7,10-06-2013 18:55:00,23.5,49.0,12.2 
... 

我已經能夠讀取所有數值爲變量使用:

from pylab import * 
from datetime import datetime 
fname ='LOG.txt' 
n0,DT1,T2,H3,DP4 = genfromtxt(fname,delimiter=',', skip_header=1, skip_footer=0,usecols=(0,1,2,3,4), autostrip=True, unpack=True, invalid_raise=True) 

但是,'date_time'列(她的列1)沒有顯示爲單獨的變量,也沒有任何返回的錯誤消息。

我想是東西放到轉換爲下列變量:

n0 = 0 column as 'u4'<br> 
DT1 = 1st column converted such that `datetime.strptime('10-06-2013 18:25:01', '%d-%m-%Y %H:%M:%S')`<br> 
T2 = 2nd column as 'f4'<br> 
H3 = 3rd column as 'f4'<br> 
DP4 = 4th column as 'f4'<br> 

我已經找到了幾個例子使用,genfromtxt,D類和strptime但我得到他們都不爲這個特定的情況下工作。

任何建議爲新手?

_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __
_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __

編輯(24 -07-2013):

我發現了一個可能的解決方案,我想什麼不夠好:

from pylab import * 
import datetime as DT 

def make_date(datestr): 
    return DT.datetime.strptime(datestr, '%d-%m-%Y %H:%M:%S') 

data1 = genfromtxt(fname, delimiter = ',', 
       skip_header=1,skip_footer=0,usecols = (0,1,2,3,4), # usecols (0..4) is required due to the serial number present in second row only 
       converters = {'Date':make_date}, 
       names = ('Line', 'Date', 'Temperature', 'Humidity','DewPoint'), 
       dtype = None, 
       invalid_raise=True) # dtype = None takes care of all data type but the one sent to converters 

# Console output: 
print(data1) 
print(data1.dtype) 

#Temperature Graph: 
figure(1) 
plot(data1['Date'],data1['Temperature'],'-xb') 
grid('on') 
ylabel('Temperature (degC)',fontsize=10) 
xlabel('Date',fontsize=10) 


這將返回:

[(1, datetime.datetime(2013, 6, 10, 18, 25), 24.0, 48.5, 12.5) 
(2, datetime.datetime(2013, 6, 10, 18, 30), 24.0, 48.0, 12.3) 
(3, datetime.datetime(2013, 6, 10, 18, 35), 23.5, 48.5, 12.0) ..., 
(12298, datetime.datetime(2013, 7, 23, 11, 10), 23.5, 43.5, 10.4) 
(12299, datetime.datetime(2013, 7, 23, 11, 15), 23.5, 43.5, 10.4) 
(12300, datetime.datetime(2013, 7, 23, 11, 20), 23.5, 43.5, 10.4)] 
[('Line', '<i4'), ('Date', 'O'), ('Temperature', '<f8'), ('Humidity', '<f8'), ('DewPoint', '<f8')] 


現在,也許有人可以幫我找到:

n0,DT1,T2,H3,DP4 = genfromtxt(fname,...,unpack=True) 

其中DT1包括:

datetime.datetime(2013, 6, 10, 18, 25) 


感謝所有幫助

回答

0

你的做法已經是非常不錯的,它給從那裏你可以得到使用operator.itemgetter領域的結構數組:

names = ('Line', 'Date', 'Temperature', 'Humidity','DewPoint') 

from operator import itemgetter 
n0, DT1, T2, H3, DP4 = itemgetter(*names)(data1) 
相關問題