У меня есть текст, подобный приведенному ниже, который я хочу сохранить в словаре, сохраняя значения тех же параметров (ключей) в подсписках.
file = """./path/to/Inventory2020_1.txt
fileType = Inventory
StoreCode
number:1145C
numId = 905895
ValuesOfProducts
prodsTypeA:150
prodsTypeB:189
UpdateTime:2020-03-05 14:45:38
InventoryTime = 2020-03-05 14:45:29
userName
number:123
./path/to/Inventory2020_2.txt
fileType = Inventory
StoreCode
number:7201B
numId = 54272
ValuesOfProducts
prodsTypeA:75
prodsTypeB:231
UpdateTime:2020-03-06 09:12:22
InventoryTime = 2020-03-06 09:11:47
userName
number:3901
"""
Мой текущий код успешно сохраняет текст во вложенном списке , используя эту строку:
import re
a = [ re.sub(r' += +', ':', line).replace(":", "=", 1).strip().split("=") for line in file.splitlines() ]
Теперь, чтобы сохранить в словаре с параметрами как keys
, я использую следующие условия:
d = dict()
for lst in a:
if len(lst) > 1:
d.setdefault(lst[0], []).append(lst[1])
else:
if "path" in lst[0]:
d.setdefault("File", []).append(re.sub(r'.+/', '', lst[0]))
>>> d
{
'File': ['Inventory2020_1.txt', 'Inventory2020_2.txt'],
'fileType': ['Inventory', 'Inventory'],
'number': ['1145C', '123', '7201B', '3901'],
'numId': ['905895', '54272'],
'prodsTypeA': ['150', '75'],
'prodsTypeB': ['189', '231'],
'UpdateTime': ['2020-03-05 14:45:38 -05:00', '2020-03-06 09:12:22'],
'InventoryTime': ['2020-03-05 14:45:29', '2020-03-06 09:11:47']
}
>>>
Как вы Можно видеть, что для некоторых параметров связанное значение отделено знаком =
в той же строке, и я могу сохранить пару key, value
в том же подсписке напрямую, используя split ("="). Но некоторые ключевые значения, которые меня интересуют, находятся в другой строке, например:
StoreCode
number:1145C
В этом случае меня интересует значение key,pair
key=StoreCode
и value=1145C
Для этого:
ValuesOfProducts
prodsTypeA:75
prodsTypeB:231
UpdateTime:2020-03-06 09:12:22
Мне нужны пары key,value
:
key=prodsTypeA
и value=75
key=prodsTypeB
и value=231
key=UpdateTime
и value=2020-03-06 09:12:22
Итак, окончательный словарь будет иметь такую структуру:
{
'File': ['Inventory2020_1.txt', 'Inventory2020_2.txt'],
'fileType': ['Inventory', 'Inventory'],
'StoreCode': ['1145C', '7201B'],
'numId': ['905895', '54272'],
'prodsTypeA': ['150', '75'],
'prodsTypeB': ['189', '231'],
'UpdateTime': ['2020-03-05 14:45:38', '2020-03-06 09:12:22'],
'InventoryTime': ['2020-03-05 14:45:29', '2020-03-06 09:11:47']
'userName': ['123', '3901']
}
Основная проблема заключается в том, что в моем текущем выводе параметры StoreCode
и userName
имеют интересующие меня значения, связанные со словом number
. Затем добавляются эти смешанные значения, и на самом деле некоторые значения, связанные с number
, принадлежат ключу StoreCode
, а другие значения, связанные с number
, принадлежат ключу userName
.
Может кто-нибудь поможет мне получить мои ожидаемый результат, пожалуйста. Заранее спасибо.