Сам код выглядит так
import pandas as pd
# Инициализируем пустой словарь для хранения результатов
res = {}
# Открываем файл 'in.txt' в режиме чтения
with open('in.txt', 'r') as f:
for line in f.readlines():
# Проверяем, если строка начинается с 'ScanID'
if line.startswith('ScanID'):
scanid = int(line.split('=')[1].strip())# Получаем значение ScanID
elif len(line) > 1: # Игнорируем пустые строки
if line.startswith('creation'):
# Если строка начинается с 'creation', добавляем ScanID в результат
res.setdefault('ScanID', []).append(scanid)
# Разделяем строку на ключ, значение и игнорируем остальные части
key, value, *_ = line.split()
# Преобразуем значение в int или float в зависимости от последнего элемента
value = int(value) if 'int' in _[-1] else float(value)
# Добавляем значение под соответствующим ключом
res.setdefault(key, []).append(value)
# Преобразуем словарь в DataFrame
df = pd.DataFrame.from_dict(res)
print(df)
на выходе получается датафрейм, где строчка ScanID игнорируется
creationTime markId distance ... distanceError bearingError dopplerError
0 5200000000 0 19991 ... 60.0 9.0 1.0
1 5800000000 1 19951 ... 60.0 9.0 1.0
2 5230000000 2 20011 ... 60.0 9.0 1.0
3 8800000000 3 19971 ... 60.0 9.0 1.0
4 9400000000 4 19891 ... 60.0 9.0 1.0
5 8830000000 5 19991 ... 60.0 9.0 1.0
6 12400000000 6 19951 ... 60.0 9.0 1.0
7 13000000000 7 19831 ... 60.0 9.0 1.0
8 12430000000 8 19991 ... 60.0 9.0 1.0
9 16000000000 9 19931 ... 60.0 9.0 1.0
10 16600000000 10 19771 ... 60.0 9.0 1.0
11 16030000000 11 19971 ... 60.0 9.0 1.0
12 19600000000 12 19931 ... 60.0 9.0 1.0
13 20200000000 13 19691 ... 60.0 9.0 1.0
14 19630000000 14 19971 ... 60.0 9.0 1.0
15 23200000000 15 19911 ... 60.0 9.0 1.0
16 23800000000 16 19631 ... 60.0 9.0 1.0
17 23230000000 17 19951 ... 60.0 9.0 1.0
18 26800000000 18 19891 ... 60.0 9.0 1.0
19 27400000000 19 19571 ... 60.0 9.0 1.0
20 26830000000 20 19951 ... 60.0 9.0 1.0
21 30400000000 21 19871 ... 60.0 9.0 1.0
22 31000000000 22 19511 ... 60.0 9.0 1.0
23 30430000000 23 19951 ... 60.0 9.0 1.0
24 34000000000 24 19851 ... 60.0 9.0 1.0
25 34600000000 25 19451 ... 60.0 9.0 1.0
26 34030000000 26 19931 ... 60.0 9.0 1.0
а хотелось бы получить
ScanID creationTime markId distance ... distanceError bearingError dopplerError
2 5200000000 0 19991 ... 60.0 9.0 1.0
2 5800000000 1 19951 ... 60.0 9.0 1.0
2 5230000000 2 20011 ... 60.0 9.0 1.0
3 8800000000 3 19971 ... 60.0 9.0 1.0
3 9400000000 4 19891 ... 60.0 9.0 1.0
3 8830000000 5 19991 ... 60.0 9.0 1.0
...
сам текстовый файл выглядит так
ScanID = 2
creationTime 5200000000 unsigned __int64
markId 0 unsigned int
distance 19991 unsigned int
bearing 30.0816135 float
amplitude 240835.844 float
peakAmplitude 701960.312 float
radialVelocity 4.73000002 float
surfaceArea 116.000000 float
minDoppler 11.0000000 float
maxDoppler 11.0000000 float
distanceError 60.0000000 float
bearingError 9.00000000 float
dopplerError 1.00000000 float
creationTime 5800000000 unsigned __int64
markId 1 unsigned int
distance 19951 unsigned int
bearing 59.9807129 float
amplitude 239853.203 float
peakAmplitude 665765.375 float
radialVelocity -8.59997368 float
surfaceArea 117.000000 float
minDoppler -21.0000000 float
maxDoppler -19.0000000 float
distanceError 60.0000000 float
bearingError 9.00000000 float
dopplerError 1.00000000 float
creationTime 5230000000 unsigned __int64
markId 2 unsigned int
distance 20011 unsigned int
bearing 120.221581 float
amplitude 242961.188 float
peakAmplitude 750964.875 float
radialVelocity -2.64299917 float
surfaceArea 115.000000 float
minDoppler -8.00000000 float
maxDoppler -4.00000000 float
distanceError 60.0000000 float
bearingError 9.00000000 float
dopplerError 1.00000000 float
ScanID = 3
creationTime 8800000000 unsigned __int64
markId 3 unsigned int
distance 19971 unsigned int
bearing 30.1713619 float
amplitude 243572.250 float
peakAmplitude 742646.750 float
radialVelocity 4.73000002 float
surfaceArea 115.000000 float
minDoppler 11.0000000 float
maxDoppler 11.0000000 float
distanceError 60.0000000 float
bearingError 9.00000000 float
dopplerError 1.00000000 float
...