Как можно разделить список python?

Пытаюсь разделить список на составные части. Возможно я не в том направлении иду?

Есть файл test.txt с содержимым:

             
                               

смена # 5902 (ККТ:#331)
  38.Mannol Classic 10W-40
                       380,00 р                   <---- типа цена***
  ост:    21.00
 прод:     1.00     380,00 р.
  47.Gleid Master -30 жид.
                       350,00 р
  ост:     2.00
 прод:     1.00     350,00 р.

Итого:              730,00 р.

Код:


with open('test.txt') as inp:
    massiv=inp.read().split()
del massiv[0:4]
print(massiv)

Вывод:

['38.Mannol', 'Classic', '10W-40', '380,00', 'р', 'ост:', '21.00', 'прод:', '1.00', '380,00', 'р.', '47.Gleid', 'Master', '-30', 'жид.', '350,00', 'р', 'ост:', '2.00', 'прод:', '1.00', '350,00', 'р.', 'Итого:', '730,00', 'р.']

А мне нужно вывести раздельно, но ничего не получается. Не к чему привязаться, т.к. код товара постоянно изменяется, название тоже, а структура не изменна. И рубли **₽** ост:, прод: убрать хочу. Помогите, пожалуйста.

Вы не подумайте, я правда до последнего пробовал, но получалось черти-что. Не хочу портить вопрос своими примерами.

Идеал:

a = ['38', 'Mannol Classic 10W-40', '380,00', '21.00', '1.00', '380,00']
b = ['47', 'Gleid Master -30 жид', '350,00', '2.00', '1.00', '350,00']
c = ['730']

Напомню, что товар может изменяться.


Ответы (1 шт):

Автор решения: Dmitry

Жестко захардкодил, но иногда и такое требуется. Поскольку по условию задачи файл вот такой и никакой другой

Я добавлю переменную с содержанием файла и прочитаю создам список через splitlines.

test_txt = """
смена # 5902 (ККТ:#331)
  38.Mannol Classic 10W-40
                       380,00 р
  ост:    21.00
 прод:     1.00     380,00 р.
  47.Gleid Master -30 жид.
                       350,00 р
  ост:     2.00
 прод:     1.00     350,00 р.

Итого:              730,00 р.
"""
initial_list = test_txt.splitlines()

Аналагом для чтения из файла будет

f = open("test.txt", "r")
initial_list = f.readlines()
f.close()

Содержание переменной initial_list

['', 'смена # 5902 (ККТ:#331)', '  38.Mannol Classic 10W-40', '                       380,00 р', '  ост:    21.00', ' прод:     1.00     380,00 р.', 
'  47.Gleid Master -30 жид.', '                       350,00 р', '  ост:     2.00', ' прод:     1.00     350,00 р.', '', 'Итого:              730,00 
р.']

Поскольку один элемент занимает 4 строки и начинается со следующей после строки которая содержит смена, то найдем начало и обрежем список

for i in initial_list:
    if "смена" in i.lower():
        initial_list = initial_list[initial_list.index(i) + 1:]

Содержание переменной initial_list теперь

['  38.Mannol Classic 10W-40', '                       380,00 р', '  ост:    21.00', ' прод:     1.00     380,00 р.', '  47.Gleid Master -30 жид.', '                       350,00 р', '  ост:     2.00', ' прод:     1.00     350,00 р.', '', 'Итого:              730,00 р.']

Разобъем initial_list на части равные одной записи, которая равняется 4 строкам или 4 членам списка и поместим в переменную items

items = []

while len(initial_list)>4:
    items.append(initial_list[0:4])
    initial_list = initial_list[4:]

Создадим функцию, чтобы "причесать" наши элементы

import re

def combing(item):
    res = []
    begin = item[0].split(".")
    res.append(begin[0].lstrip())
    res.append(begin[1])
    res.append(item[1].split()[0] )
    res.append(re.findall(r'\d*\.\d+|\d+', item[2])[0])
    res.append(re.findall(r'\d*\.\d+|\d+', item[3])[0])
    res.append(re.findall(r'[\d]+,[\d]+', item[3])[0])
    return res

Прогоним через нее и посмотрим на результат

result = []

for i in items:
    result.append(combing(i))

переменная result содержит

[['38', 'Mannol Classic 10W-40', '380,00', '21.00', '1.00', '380,00'], 
 ['47', 'Gleid Master -30 жид', '350,00', '2.00', '1.00', '350,00']]

Вроде то, что надо.

Плюс сама переменная initial_list будет содержать

['', 'Итого:              730,00 р.']

По аналогии тоже можно обработать

→ Ссылка