하위 목록에 동일한 매개 변수 (키)의 값을 저장하여 사전에 저장하려는 아래와 같은 텍스트가 있습니다.
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
내가 관심있는 값이 word와 관련되어 있다는 것 number
입니다. 그런 다음 혼합 된 값을 추가하고 실제로 관련된 일부 값 number
은 key에 속 StoreCode
하고 다른 값 number
은 key에 속합니다 userName
.
누군가가 내 예상 결과를 얻을 수 있도록 도와주세요. 미리 감사드립니다.
이것은 정확히 지정한 방식은 아니지만 구조가 모든 측면에서 일정하다고 가정하면 정규식 사용을 피하는 다음 (또는 이와 유사한 것)이 아마도 작동 할 것입니다.
subfiles = file.split('./path/to/')
locs = [0,2,3,5,6,7,8,10]
vals = []
for s in subfiles[1:]:
target = s.strip().splitlines()[1:]
row = [s.split('fileType')[0].strip()]
for loc in locs:
if "=" in target[loc]:
entry = target[loc].split('=', 1)[1].strip()
else:
if ":" in target[loc]:
entry = target[loc].split(':',1)[1].strip()
row.append(entry)
vals.append(row)
key_names =['File','fileType', 'StoreCodenumber','numId','ValueOfProdsTypeA','ValueOfProdsTypeB','ProdsUpdateTime','InventoryTime','userName']
d = {}
for k, v1, v2 in zip(key_names,vals[0],vals[1]):
d[k] = [v1,v2]
d
산출:
{'File': ['Inventory2020_1.txt', 'Inventory2020_2.txt'],
'fileType': ['Inventory', 'Inventory'],
'StoreCodenumber': ['1145C', '7201B'],
'numId': ['905895', '54272'],
'ValueOfProdsTypeA': ['150', '75'],
'ValueOfProdsTypeB': ['189', '231'],
'ProdsUpdateTime': ['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'],
'userName': ['123', '3901']}
분명히 실제 필요에 맞게 수정할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다