2015-04-22 72 views
1

我有以下2個文本文件,它們包含由文本行分隔的數字塊。我正在嘗試將塊讀入Pandas數據框或Numpy數組中。以下是文件:Python將文本文件中的數字塊(用單行文本分隔)讀入Numpy數組或Pandas DataFrame

FILE1.TXT:

Line one text 
Line two text 
Line three text 
Temperature Readings: 1 5 abcd 
17 7.7 
18 1.9 
19 14.6 
11 7.1 
    4 2.4 
Temperature Readings: 2 3 ddef 
26 4.2 
45 12.0 
    2 9.3 
Air-Pressure was taken: 17.0 474.0 

Top Total 
11 317 
14  34 

FILE2.TXT:

Line one text 
Line two text 
Line three text 
Temperature Readings: 1 3 fnlksn 
11 8.9 
35 2.6 
41 1.7 
14 3.3 
    8 11.5 
Temperature Readings: 2 7 vsfgfs 
16 26.7 
91 10.5 
12 11.3 
Temperature Readings: 3 4 tomt_2 
11 11.2 
78 2.8 
56 1.5 
Air-Pressure was taken: 17.0 474.0 

Top Total 
74  31 
99  14 
83  04 
9  10 

我正在尋找一種方式,這兩個文件閱讀。問題是,在第一個文件中,只有2個溫度讀數塊。第二個文件有不同數量的塊 - 在本例中爲3,但可以是任意數量。

這是什麼原因造成我的問題:

  • 我想在每塊標題下面的數字閱讀。我會 喜歡讀取這些數字到一個numpy數組或熊貓數據框。
  • 我遇到的第二個問題是我不知道如何閱讀 數字sinec他們有一個領先的空白 - 這使得它難以分開他們 。

這裏是我想獲得:

從FILE1.TXT: T_1 =

0 1 
0 17 7.7 
1 18 1.9 
3 19 14.6 
4 4 2.4 

T_2 =

0 1 
0 26 4.2 
1 45 12.0 
2 2 9.3 

從FILE2.TXT: T_1 =

0 1 
0 11 8.9 
1 35 2.6 
2 41 1.7 
3 14 3.3 
4 8 11.5 

T_2 =

0 1 
0 16 26.7 
1 91 10.5 
2 12 11.3 

T_3 =

0 1 
0 11 11.2 
1 78 2.8 
2 56 1.5 

是否有辦法在Python 2.7做到這一點?

編輯:包括Air-Pressure及以下的行可以忽略。

+0

查看字符串方法'strip()'和'split()'。 – TigerhawkT3

回答

3

不知道如果你能做到這一切在大熊貓或沒有,但你可以使用groupbyitertools.islice跳過和組線路:

from itertools import groupby,islice 
import pandas as pd 

with open("file2.txt") as f: 
    for k, v in groupby(islice(f, 3, None),key=lambda x: x.strip()[0:1].isdigit()): 
     val = list(v) 
     if k: 
      df = pd.DataFrame(map(str.split,val)) 
      print(df) 
      print("")) 
     elif val[-1] == 'Top Total\n': 
      break 

    0  1 
0 11 8.9 
1 35 2.6 
2 41 1.7 
3 14 3.3 
4 8 11.5 

    0  1 
0 16 26.7 
1 91 10.5 
2 12 11.3 

    0  1 
0 11 11.2 
1 78 2.8 
2 56 1.5 

他們都實際上是不同的datafames,他們如何存儲高達給你:

data_frames = [] 
with open("file2.txt") as f: 
     for k, v in groupby(islice(f, 3, None),key=lambda x: x.strip()[0:1].isdigit()): 
      val = list(v) 
      if k: 
       data_frames.append(pd.DataFrame(map(str.split,val))) 
      elif val[-1] == 'Top Total\n': 
       break 
print(data_frames) # three dataframes in a list 
+0

嗨,對不起,我感到困惑。我不得不編輯原始帖子。現在完成了。基本上,在每個文件的最後一個數字塊的末尾,有一行,後面跟着一個空行和一些下面的數字< - 這一切都需要忽略。再次,遺憾的是沒有包含在OP中。考慮到這一點,是否有可能說'.startswith(「氣壓| | Top」)'? –

+0

@WR。是否在相關數據中包含數字的行? –

+0

@WR,嘗試編輯 –