@incognito123

Почему не работает код на python?

Сам код выглядит так
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
...
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
@q2digger
никого не трогаю, починяю примус
попробовал код с этими данными, все получатеся со ScanID

66e04cd4df194805165369.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы