Как можно разделить список 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 шт):
Жестко захардкодил, но иногда и такое требуется. Поскольку по условию задачи файл вот такой и никакой другой
Я добавлю переменную с содержанием файла и прочитаю создам список через 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 р.']
По аналогии тоже можно обработать