Предположим, у меня есть текстовый файл, содержащий следующее:
12277 17/06/2019 350 BJ201AB FMACRI
0 J 52 4081.15 166851
0 J 52 4496.64 166852
0 J 52 5139.07 166855
0 J 52 5773.82 166858
J E 70 25 B159681
12509 21/06/2019 443 DH717WF BLANCO
B J 42 5376.63 5164/A
12504 21/06/2019 443 EB631NF LUCCIG
B J 44 5567.46 5165/A
0 J 52 5347.58 166950
0 J 52 4742.4 166953
0 J 18 1146.24 427876
0 J 4 0.4 427877
J 0 372 1 B159763
R 0 1567 1 B159764
Предполагая, что я прочитаю файл так:
with open('/home/pexp1/mezzi/INPUT') as f:
lines = f.readlines()
data = [(line.rstrip()).split('\t') for line in lines]
Каков будет правильный подход к группировке каждой строки, начинающейся с чего-либо (целое число, строка и т. Д.), С каждой второй строкой под ней, до тех пор, пока не будет найдена новая строка, соответствующая указанному выше правилу?
Предполагая, что я хотел бы позвонить на линию, которая соблюдает правило, и получить все в своей группе, какую структуру данных будет лучше объединить в одну строку?
РЕДАКТИРОВАТЬ: Извинения за отсутствие ясности.
Если я запускаю приведенный выше код, я получаю это при запуске print(data)
:
[
['12277', '17/06/2019', '350', 'BJ201AB', 'FMACRI'],
['', '', '', '', '', '0', 'J', '52', '4081.15', '166851'],
['', '', '', '', '', '0', 'J', '52', '4496.64', '166852'],
['', '', '', '', '', '0', 'J', '52', '5139.07', '166855'],
['', '', '', '', '', '0', 'J', '52', '5773.82', '166858'],
['', '', '', '', '', 'J', 'E', '70', '25', 'B159681'],
['12509', '21/06/2019', '443', 'DH717WF', 'BLANCO'],
['', '', '', '', '', 'B', 'J', '42', '5376.63', '5164/A'],
['12504', '21/06/2019', '443', 'EB631NF', 'LUCCIG'],
['', '', '', '', '', 'B', 'J', '44', '5567.46', '5165/A'],
...
]
Как видите, это список списков.
Как я могу сгруппировать эти элементы вместе, чтобы списки, которые содержали элемент в позиции индекса 0 (в данном случае 12277
, 122509
и т. Д.), Группировались вместе со списками, которые следуйте ниже (без элементов с указателем поз. 0, 1, 2, 3, 4)?
Пример:
['12277', '17/06/2019', '350', 'BJ201AB', 'FMACRI']
сгруппированы с
['', '', '', '', '', '0', 'J', '52', '4081.15', '166851']
, ['', '', '', '', '', '0', 'J', '52', '4496.64', '166852']
и т. Д. До следующей строки, содержащей элемент с индексом 0: ['12509', '21/06/2019', '443', 'DH717WF', 'BLANCO']
РЕДАКТИРОВАТЬ2: Это решение, которое я придумал:
shipments = []
shuttle_lst = []
for line in data[1:]:
if len(line[0]) < 1:
shipments.append(line)
else:
shuttle = data[data.index(line) - (len(shipments) + 1)]
shipments.append(shuttle)
new_lst = [lst for lst in shipments]
shuttle_lst.append(new_lst)
shipments.clear()
Это создает список списков, где каждый заголовок становится последним элементом этого списка.