2015-07-21 77 views
2

我有一個非常簡單的問題:哪種方法可以用Python從txt文件中讀取不同的條目?python從文件中讀取數據

想我也一個文本文件,如:

42017  360940084.621356 21.00 09/06/2015 13:08:04 
42017  360941465.680841 29.00 09/06/2015 13:31:05 
42017  360948446.517761 16.00 09/06/2015 15:27:26 
42049  361133954.539315 31.00 11/06/2015 18:59:14 
42062  361208584.222483 10.00 12/06/2015 15:43:04 
42068  361256740.238150 19.00 13/06/2015 05:05:40 

在C,我會做:

while(fscanf(file_name, "%d %lf %f %d/%d/%d %d:%d:%d", &id, &t0, &score, &day, &month, &year, &hour, &minute, &second) != EOF){...some instruction...} 

什麼會做這樣的事情在Python中的最佳方式?爲了將每個值存儲到不同的變量中(因爲我必須在整個代碼中使用這些變量)。

在此先感謝!

+0

可能重複閱讀一個大的文本文件(幾GB)](http://stackoverflow.com/questions/14944183/python-fastest-way-to-read-a-large-text-file-several-gb) – user3636636

+1

你想取決於列的字符串列表或類型列表? – FunkySayu

+0

你可以看看Numpy [loadtxt](http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html) – Mel

回答

2

我覺得像muddyfish回答是好,這裏是另一種方式(也許有點輕)

import time 
with open(file) as f: 
    for line in f: 
     identifier, t0, score, date, hour = line.split() 

     # You can also get a time_struct from the time 
     timer = time.strptime(date + hour, "%d/%m/%Y%H:%M:%S") 
+1

請注意,id是一個保留字。如果你想使用它作爲標識符,請使用id_ = value – muddyfish

+0

感謝FunkySayu!我也結束了類似的事情......因爲我需要每個單獨的條目(日,月,年等),我想知道是否有更快的方法,或者我必須使用line.split(「/」)和line.split(「:」)另一次? – urgeo

+0

關鍵是我必須處理每個單個條目(如使用t0和不同的日期和月份進行操作),所以我需要將數據存儲到不同的變量中 – urgeo

0

我會擡頭看string.split()方法

例如,你可以使用

for line in file.readlines(): 
    data = dict(zip(("id", "t0", "score", "date", "time"), line.split(" "))) 
    instructions() 
0

根據你想用數據做什麼,pandas可能是一些尋找到:

import pandas as pd 

with open(file_name) as infile: 
    df = pd.read_fwf(infile, header=None, parse_dates=[[3, 4]], 
     date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y %H:%M:%S')) 

雙列表[[3, 4]]連同date_parser參數將作爲單個數據時間對象讀取第三個和第四個(索引爲0的)列。然後,您可以訪問該列的各個部分與

>>> df['3_4'].dt.hour 
0 13 
1 13 
2 15 
3 18 
4 15 
5  5 
dtype: int64 

(如果你不喜歡 '3_4' 鍵,使用parse_dates上面的參數如下:

parse_dates={'timestamp': [3, 4]} 

read_fwf用於讀取數據似乎遵守的固定寬度列。另外,還有一些功能,如read_csvread_tablelot more

(這個答案是非常的this SO answer重複,而是因爲在這裏這個問題就比較一般了,我已經把這個這裏另一種答案,而不是作爲一個評論。)的[Python的最快方法