如果你沒有使用numpy.genfromtxt()
,如果文件的行是恆定的長度(或慢或不高度可變的改變),你可以計算的偏移量,並使用file.seek()
去那所抵消。例如,使用os.stat()
找出文件大小,減去360倍平均線長加上緩衝,尋找,讀取。
使用numpy.genfromtxt()
,你大概可以使用skip_header
參數指定多少行讀取數據之前向後跳躍。例如,讀取文件的第一行以查明文件何時開始,並計算自那時起的分鐘數。假設它是minutesOld
分鐘。在genfromtxt()
參數列表中說skip_header = minutesOld - 360
。
因此,您不必一次跳過大量行,可以在同一genfromtxt調用中獲取時間和臨時數據。要做到這一點,說(例如)
data = numpy.genfromtxt(t_in, dtype=None, usecols=(0,1), skip_header = minutesOld - 360)
人們可以通過usecols
設置或通過dtype
設定獲得相同的呼叫時間和溫度數據;請參閱genfromtxt Examples文檔。下面顯示的代碼說明了前者。這個例子的溫度記錄文件有大約1234行,並且時間沒有附加日期。取而代之的是小時數繼續向上計數24.調整計算文件中行數的代碼以符合您自己的時間表示約定。
from numpy import genfromtxt
from itertools import islice
from time import localtime, time
toKeep = 20
with open('temperature_logging') as fin:
start = genfromtxt(islice(fin,1), dtype=None, usecols=(0,1))
hf, mf = map(int, start.tolist()[0].split(':'))
ti = localtime(time())
hn, mn = ti.tm_hour, ti.tm_min
print 'File start: {:02d}:{:02d}, Time Now: {:02d}:{:02d}'.format(hf, mf, hn, mn)
minutesOld = (hn-hf)*60 + mn-mf
if minutesOld < 0: minutesOld += 24*60
data = genfromtxt(fin, dtype=None, usecols=(0,1), skip_header = minutesOld - toKeep)
print data
這裏是從上面的代碼的輸出示例:
File start: 03:43, Time Now: 00:16
[('23:57', 66.3) ('23:58', 66.8) ('23:59', 66.7) ('24:00', 67.1)
('24:01', 66.7) ('24:02', 67.1) ('24:03', 66.8) ('24:04', 67.2)
('24:05', 67.4) ('24:06', 67.7) ('24:07', 67.3) ('24:08', 67.1)
('24:09', 66.8) ('24:10', 67.3) ('24:11', 67.8) ('24:12', 67.3)
('24:13', 67.6) ('24:14', 67.6) ('24:15', 67.7) ('24:16', 67.3)]
你知道多少行的文件中,當你開始? –
你必須使用numpy.genfromtxt – enginefree
你知道'tail'嗎? – wim