我有以下2个文本文件,它们包含由文本行分隔的数字块。我试图将块读入Pandas数据帧或Numpy数组。以下是文件:
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,但它可以是任何数字。
这就是导致我出现问题的原因:
以下是我想要的内容:
来自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 :(得分:3)
不确定您是否可以在pandas中完成所有操作,但您可以使用groupby
和itertools.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
它们实际上都是不同的数据名称,您存储它们的方式取决于您:
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