Извлечь данные из строки и добавить в указанные c пронумерованные поля - PullRequest
0 голосов
/ 12 июля 2020

Извините, но мне нужна ваша помощь, если возможно. Я полный новичок в Python, и я полностью застрял. Я хотел бы знать, какие будут первые шаги для решения моей проблемы.

У меня есть (много страниц) строк со следующей структурой:

pg10_65 * 3.2200  * 22 24 28 30 33 34 36 37

pg10_116 * 3.2420 * 24 28 30 33 34 37

pg10_118 * 3.1500 * 19 24 28 30 33 34 36

pg10_120 * 3.1230 * 24 28 30 33 34 36 37

pg74_32 * 3.0350 * 17 28 30 33 34 36 37 38

Для каждой строки и между ними символы * у меня есть значение (di git точка с четырьмя десятичными знаками), а после последнего символа * у меня есть ряд чисел от 1 до 68, но не все из них.

I есть 68 ящиков.

В этом примере и для первой строки я хочу добавить 3.2200 к ячейкам 22, 24, ..., 36, 37. Если есть 0, добавьте 3,2200 к 0, если есть другое значение, добавьте к этому значению.

Для второй строки я хочу добавить значения 3.2420 в поля 24, 28, ..., 34, 37. Если есть 0, добавить к 0, если есть другое значение, добавьте к этому значению 3,2420.

И так далее для каждой из строк.

В итоге у меня будет 60 ящиков со всеми добавленными значениями, соответствующими этим полям.

Я полностью застрял на этом.

Большое спасибо всем за ваш совет.

José

1 Ответ

0 голосов
/ 12 июля 2020

Я нашел решение вашей проблемы.

def add_to_boxes(input_string, all_boxes):
    '''
    Takes a list of boxes and your string input and does the additions you requested
    '''
    _, float_value, box_list = input_string.split('*')

    float_value = float(float_value) #convert from string to float
    box_list = [int (s) for s in box_list.split(' ')[1:]] #convert from string to list of integers

    print("Adding ", float(float_value), " to ", box_list)
    for box in box_list:
        all_boxes[box-1] += float_value #boxes are numbered from 0 to 67


boxes = [0 for i in range(68)] # 68 boxes with the value 0
input_str = "pg10_65 * 3.2200 * 22 24 28 30 33 34 36 37"

add_to_boxes(input_str, boxes)
print(boxes)

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы относительно того, как это работает.

...